其他分享
首页 > 其他分享> > 2020新生赛题解

2020新生赛题解

作者:互联网

A

题面:
在这里插入图片描述在这里插入图片描述

结构体+快排

#include<bits/stdc++.h>
using namespace std;
struct node{
    char name[105];
    int time;
}a[1000005];

int cmp(node a,node b){
    if(a.time<b.time){
    	return 1;
	}
    return 0;
}

int main(){
    int n;
    cin>>n;
    for(int i = 1;i <= n;i++){
        cin>>a[i].name>>a[i].time;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++){
        cout<<a[i].name<<" ";
    }
    return 0;
}

L

题面:
在这里插入图片描述在这里插入图片描述

法一:计数,若是奇数就输出
法二:所有数异或,输出结果

#include<bits/stdc++.h>
using namespace std;
int n;
int d=0;
int a[1000005];
int main(){
    cin>>n;
    for(int i = 0;i < n;i++){
        cin>>a[i];
    }
    for(int i = 0;i <n;i++){
        d^=a[i];
    }
    cout<<d;
    return 0;
}

F

题面:
在这里插入图片描述

博弈论,一直会赢
故输出:

#include<bits/stdc++.h>
using namespace std;
int n;
int main(){
    cin>>n;
    printf("Win");
    return 0;
}

M

题面:
在这里插入图片描述

在这里插入图片描述
如果k==n,则a和b重合或者b在a右边即可,移动步数为0;
如果k>n,a则需要移动到k点才可;
如果k<n,则b点可能在a点左边找到,如果a点(n)为奇数,则可能的k为奇数,反之为偶数,则只需判断输入的k和n的奇偶性是否相同,相同不需要移动,不同a点向右移动一步即可。

#include<bits/stdc++.h>
using namespace std;
int t;
int k[1000005];
int n[1000005];
int main(){
    cin>>t;
    for(int i=1;i<=t;i++){
        cin>>n[i]>>k[i];
    }
    for(int i=1;i<=t;i++){
        if(k[i]==n[i]){
            cout<<0<<endl;
        }
        if(k[i]>n[i]){
            cout<<k[i]-n[i]<<endl;
        }
        else{
            if(((n[i]&1==1)&&(k[i]&1==1))||((n[i]&1==0)&&(k[i]&1==0))){
                cout<<0<<endl;
            }else{
                cout<<1<<endl;
            }
        }
    }
    return 0;
}

I

题面:
在这里插入图片描述

因为只有平方数的因子是奇数个,即平方数编号的学妹会进行奇数次操作,因此一定会保持站着。

#include<bits/stdc++.h>
using namespace std;
long long n;
int main(){
    cin>>n;
    for(long long i=1;i*i<=n;i++){
            cout<<i*i<<" ";
        }
    return 0;
}

J

题面:
在这里插入图片描述

先按所有的结束时间排序,
然后选择不会重复的时间计数

#include<bits/stdc++.h>
using namespace std;
int n;
struct node{
    int start;
    int last;
}a[50005];

int cmp(node a,node b){
    if(a.last<b.last){
    	return 1;
	}
    return 0;
}

int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].start>>a[i].last;
    }
    sort(a+1,a+n+1,cmp);
    /*for(int i=1;i<=n;i++){
        cout<<a[i].start<<" "<<a[i].last<<endl;
    }*/
    int ans=0,l=0;
        for(int i=1;i<=n;i++){
            if(a[i].start>=l){
                l=a[i].last;
                ans++;
            }
        }
    cout<<ans;
    return 0;
}

K

题面:
在这里插入图片描述在这里插入图片描述

只需要判断输入的数字是否为递减顺序即可

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

标签:include,cout,int,题解,新生,cin,题面,2020,main
来源: https://blog.csdn.net/zhaoawen/article/details/111461288