MySQL的查询完结,vju树状题组完结,cf补题

目录

MySQL

查询

比较条件

判空

逻辑条件

模糊条件

where in

聚合查询

排序查询

vju

线段树OR树状数组 - Virtual Judge

cf

Problem - A - Codeforces

Problem - A - Codeforces

Problem - B - Codeforces

周总结


MySQL

查询

比较条件

 

SELECT *FROM student WHERE age>12;

注意:如果查询后只需要出现其中几列,在*这个位置写上要查询的列。 

判空

SELECT device_id,gender,age,university FROM user_profile WHERE age is not NULL;

作用是剔除为空的数据。

逻辑条件

SELECT device_id,gender,age,university,gpa FROM user_profile
 WHERE  GPA>3.5 and gender='male';

 GPA大于3.5的男性

SELECT device_id,gender,age,university,gpa FROM user_profile
 WHERE  GPA>3.7 or university='北京大学';

GPA大于3.7或者学校为北京大学的学生

模糊条件

SELECT * FROM student WHERE name LIKE '%三%';

 表示查找student这个表中的名字带有‘三’的数据。

where in

select device_id,gender,age,university,gpa from user_profile
where university in('北京大学','复旦大学','山东大学');

筛选出学校为'北京大学','复旦大学','山东大学'的学生信息。

聚合查询

SELECT max(gpa) FROM user_profile where university='复旦大学';

找复旦大学学生gpa最高值是多少

SELECT count(gender) as male_num,round(avg(gpa),1) as avg_gpa FROM user_profile where gender="male";

求男性用户有多少人以及他们的平均gpa是多少,保留小数位数为1。

排序查询

SELECT device_id,age FROM user_profile ORDER BY age;

取出用户信息表中的用户年龄,请取出相应数据,并按照年龄升序排序。

SELECT device_id,gpa,age FROM user_profile ORDER BY gpa desc,age desc;

取出用户信息表中对应的数据,并先按照gpa、年龄降序排序输出。

SELECT device_id,gpa,age FROM user_profile ORDER BY gpa ,age ;

取出用户信息表中的年龄和gpa数据,并先按照gpa升序排序,再按照年龄升序排序输出。

vju

线段树OR树状数组 - Virtual Judge

分析:我开始看这个题的时候,我觉得是纯覆盖,直接干就行,还是失策了,数据有点多,会爆,然后我就想到了贪心+排序,还是有问题,因为它数据一打乱可能就会造成多几块或者少几块的情况,然后接触了一个只有一点点印象的东西——离散,,,太离谱了,我是真的想不到,用离散+贪心+排序+去重,就是这个题目的精华。

  这个真的让我挺震惊的,因为之前要去重或者二分查找的话都要自己打代码,然后才能达到效果。所以真的从c转成c++真的挺重要的,不然别人两句代码的事,自己要打几十行。

代码如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;

struct ffff
{
    int l;
    int r;
}a[10002<<4]; 

struct fffff
{
    int l;
    int r;
    int val;
    int lazy;
    int sum;
    int mid()
    {
        return (l+r)/2;
    }
}t[20002<<4];

int dqu()
{
    char chr=getchar(); 
    int f=1,sum=0;
    while(!isdigit(chr)) 
    {
        if(chr=='-') 
        f=-1;
        chr=getchar();
    }
    while(isdigit(chr))  
    {
        sum=sum*10;
        sum+=chr-'0';
        chr=getchar();
    }
    return sum*f;
}

int sum = 0,n,js=0,x,y;
int b[20005<<4];
bool bf[20005<<4];

void build(int i,int l,int r)
{
    t[i].l=l;
    t[i].r=r;
    t[i].val=0;
    if(l==r)
      return;
    int m=t[i].mid();
    build(i*2,l,m);
    build(i*2+1,m+1,r);
}

int quc()
{
    scanf("%d",&n); 
    js = 0;
    for(int i = 1;i <= n;i++) 
    {
        a[i].l = dqu();
        a[i].r = dqu();
        b[++js] = a[i].l;
        b[++js] = a[i].r;
        b[++js] = a[i].r + 1;
    }
    sort(b+1,b+js+1);
    int len;
    len=unique(b + 1,b + js + 1) - b - 1;
    for(int i = 1; i <= n;i++) 
    {
        a[i].l = lower_bound(b + 1,b + len + 1,a[i].l) - b;//二分查找
        a[i].r = lower_bound(b + 1,b + len + 1,a[i].r) - b;
    }
    return len;
}

void query(int i,int l,int r)
{
    if(t[i].val!=-1)
    {
    	 if(!bf[t[i].val])
         {
            bf[t[i].val] = 1;
            sum++;
         }
        return;
    }
    query(i*2,l,r);
    query(i*2+1,l,r);
}

void jiar(int i)
{
    if(t[i].val==-1)  
    return;
    t[i*2].val=t[i*2+1].val=t[i].val;  
    t[i].val=-1;
}

void fout(int i,int l,int r,int x)
{
    if(l<=t[i].l&&t[i].r<= r)
    {
        t[i].val=x;
        return;
    }
    jiar(i);
    int m=t[i].mid();
    if(l<=m)  
        fout(i*2,l,r,x);
    if(r>m)
        fout(i*2+1,l,r,x);
}

int xwen(int l,int r)
{
    memset(bf,0,sizeof(bf));
    sum = 0;
    bf[0] = 1;
    query(1,l,r);
    return sum;
}

int main()
{	
    int tt;
    scanf("%d",&tt);
    while(tt--)
    {
        int m=quc();   
        js=0;
        build(1,1,m);
        for(int i = 1;i <= n;i++)
            fout(1,a[i].l,a[i].r,++js);
        printf("%d\n",xwen(1,m));
    }
    return 0;
}

cf

Problem - A - Codeforces

分析:这道题分两块写,它一个数中最大值和最小值相减的最大值是9,那也就是说只要两个数之间的差大于等于90,那么就可以直接找一个数c使得c*90%100为一个整数,这就是第一部分。第二部分是两数之间的差小于90,反正数也不多,直接浅浅地暴力一下就行。

代码如下:

#include<stdio.h>
int xysz(int x)
{
	int a[10],i,n,t=x,max=0,min=10;
	for(i=0;t;i++)
	{
		a[i]=t%10;
		t/=10;
		if(a[i]>max) max=a[i];
		if(a[i]<min) min=a[i];
	}
	return max-min;
}
 
int main()
{
	int t,i,l,r;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&l,&r);
		int i,max=0,t,temp=l;
	for(i=l;i<=r;i++)
	{
		t=xysz(i);
		if(t>max) 
		{
			max=t;
			temp=i;
		}
		if(max>=9) 
		{
			temp=i;
			break;
		}
	}
	printf("%d\n",temp);
	}
	return 0;
}

Problem - A - Codeforces

分析:

这个题很好想,因为它子序列的起点从哪里开始是你自己决定的,所以只要我目前的这个位置之后的数字,有一个小于或者这个位置的序号的数就行。

代码如下:

#include<stdio.h>
#include<math.h>
#include<string.h>
int a[102];
int main()
{  
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int n;
		scanf("%d",&n);
		for(int i=1;i<=n;i++)
		scanf("%d",a+i);
		int f=0;
		for(int i=1;i<=n;i++)
		{
			for(int j=i;j<=n;j++)
			{
				if(a[j]<=i)
				{
					f=1;
					printf("YES\n");
					break;
				}
			}
			if(f)
			break;
		}
		if(f==0)
		printf("NO\n");
	} 
}

Problem - B - Codeforces

分析:

这个题当时想了二十多分钟吧,开始一直顺着想,然后突然就发现逆着想更好想,首先,它肯定是不能为偶数的,一旦是偶数就输出-1,那为奇数的时候呢?只要总操作次数不超过40,那它始终都是能出来的,那么对于奇数,他就两种可能,要么是2*x-1得到的,要么是2*x+1得到的,那就两种都试一下,只要其中有一个操作过后不得偶数,那么就可以,反之就使用另外一种。

代码如下:

#include<stdio.h>
#include<math.h>
#include<string.h>

int main()
{  
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n;
        scanf("%d",&n);
        if(n%2==0)
        printf("-1\n");
        else 
        {
            int a[42]={0};
            int i;
            int f=0;
            for(i=1;i<=40;i++)
            {
                if(n==1)
                {
                    f=1;
                    break;
                }
                if(n<1)
                break;
                if((n-1)/2%2==1)
                {
                    a[i]=2;
                    n=(n-1)/2;
                }
                else
                {
                    a[i]=1;
                    n=(n+1)/2;
                } 
            }
            if(f)
            {
             printf("%d\n",i-1);
             i--;
            do{
            printf("%d ",a[i]);
            }while(i-->1);
            printf("\n");
            }
            else 
            printf("-1\n");
        }
    } 
}

周总结

MySQL的查询学完了,项目设计思路已经交给学姐了,学姐说还行,但是我觉得还不够细,因为学的东西不多,具体的操作还是很模糊,所以等把那些东西都学完之后,会再次进行补充和具体化。

这周打了一场cf,手感是比之前好一点了,但是要注意编译器的问题,有些编译器它可能会爆时间,但是换个编译器它就不爆时间了。补了一场cf,这场cf比较偏数学。补了一场atc,这场的题目不是很难,在接受范围内。打了一场牛客,经验还是要积累,感觉经验非常非常少。

  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
npm WARN deprecated source-map-url@0.4.1: See https://github.com/lydell/source-map-url#deprecated npm WARN deprecated stable@0.1.8: Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility npm WARN deprecated consolidate@0.15.1: Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog npm WARN deprecated urix@0.1.0: Please see https://github.com/lydell/urix#deprecated npm WARN deprecated source-map-resolve@0.5.3: See https://github.com/lydell/source-map-resolve#deprecated npm WARN deprecated resolve-url@0.2.1: https://github.com/lydell/resolve-url#deprecated npm WARN deprecated w3c-hr-time@1.0.2: Use your platform's native performance.now() and performance.timeOrigin. npm WARN deprecated microargs@1.1.2: This project has been renamed to @pawelgalazka/cli-args. Install using @pawelgalazka/cli-args instead npm WARN deprecated microcli@1.3.3: This project has been renamed to @pawelgalazka/cli . Install using @pawelgalazka/cli instead npm WARN deprecated @babel/polyfill@7.12.1: 🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information. npm WARN tarball tarball data for @jest/types@http://10.129.3.105:8081/repository/npm-all/@jest/types/-/types-27.5.1.tgz (sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==) seems to be corrupted. Trying again. npm WARN deprecated runjs@4.4.2: This project has been renamed to 'tasksfile'. Install using 'npm install tasksfile' instead. npm WARN tarball tarball data for @jest/console@http://10.129.3.105:8081/repository/npm-all/@jest/console/-/console-27.5.1.tgz (sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==) seems to be corrupted. Trying again. npm WARN tarball tarball data for @jest/test-result@http://10.129.3.105:8081/repository/npm-all/@jest/test-result/-/test-result-27.5.1.tgz (sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==) seems to be corrupted. Trying again. npm WARN deprecated svgo@1.2.0: This SVGO version is no longer supported. Upgrade to v2.x.x. npm WARN tarball tarball data for @jest/types@http://10.129.3.105:8081/repository/npm-all/@jest/types/-/types-27.5.1.tgz (sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==) seems to be corrupted. Trying again. npm WARN tarball tarball data for @jest/console@http://10.129.3.105:8081/repository/npm-all/@jest/console/-/console-27.5.1.tgz (sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==) seems to be corrupted. Trying again. npm WARN tarball tarball data for @jest/test-result@http://10.129.3.105:8081/repository/npm-all/@jest/test-result/-/test-result-27.5.1.tgz (sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==) seems to be corrupted. Trying again.
07-22

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值