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

目录

MySQL

查询

比较条件

判空

逻辑条件

模糊条件

where in

聚合查询

排序查询

vju

线段树OR树状数组 - Virtual Judge

cf

Problem - A - Codeforces

Problem - A - Codeforces

Problem - B - Codeforces

周总结


MySQL

查询

比较条件

MySQL的查询完结,vju树状题组完结,cf补题_第1张图片

 

SELECT *FROM student WHERE age>12;

MySQL的查询完结,vju树状题组完结,cf补题_第2张图片

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

判空

MySQL的查询完结,vju树状题组完结,cf补题_第3张图片

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

作用是剔除为空的数据。

逻辑条件

MySQL的查询完结,vju树状题组完结,cf补题_第4张图片

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或者学校为北京大学的学生

模糊条件

MySQL的查询完结,vju树状题组完结,cf补题_第5张图片

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

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

where in

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

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

聚合查询

MySQL的查询完结,vju树状题组完结,cf补题_第6张图片

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。

排序查询

MySQL的查询完结,vju树状题组完结,cf补题_第7张图片

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

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

MySQL的查询完结,vju树状题组完结,cf补题_第8张图片

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

代码如下:

#include
#include
#include
#include
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
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]max) 
		{
			max=t;
			temp=i;
		}
		if(max>=9) 
		{
			temp=i;
			break;
		}
	}
	printf("%d\n",temp);
	}
	return 0;
}

Problem - A - Codeforces

分析:

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

代码如下:

#include
#include
#include
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
#include
#include

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,这场的题目不是很难,在接受范围内。打了一场牛客,经验还是要积累,感觉经验非常非常少。

你可能感兴趣的:(java,开发语言)