Sample Input 1
4
语文 9
数学 56
英语 23
物理 7
Sample Output 1
物理 语文 英语 数学
Sample Input 2
5
化学 156
C语言 45665
工图 55
高数 985
Python 165
Sample Output 2
工图 化学 Python 高数 C语言
Sample Input 1
3 3
1 2 3
4 5 6
7 8 9
1
1 1 2 2 2 2 3 3
Sample Output 1
35
Sample Input 1
5
Sample Output 1
Win
Hint
若有5堆宝石,菊花侠可以先选择x=4,他拿第四堆的同时也得拿第二堆、第一堆,还剩第三堆和第五堆,桃花怪只能拿第三堆或者第五堆,然后菊花侠拿剩下的一堆,菊花侠拿完,因此菊花侠获胜,输出Win。
此题为博弈论题,可通过反证法证明先手必胜。因此直接输出Win即可
#include<stdio.h>int main(){printf("Win");return 0;} I、dcdst哥哥の好奇
Sample Input 1
5
Sample Output 1
1 4
Hint
dcdst哥哥悄悄提醒你孤独的泥猴桃最多有 2^40个孤独的泥猴桃(孤独的泥猴桃好多,dcdst哥哥好高兴(dcdst哥哥:好耶!~))。
经分析可知,最后站起来的编号一定为平方数(因数有奇数个)
#include<stdio.h>int main(void){ long long n; //此处注意类型 scanf("%lld",&n); long long i; for(i=1;i*i<=n;i++){ printf("%lld ",i*i); } return 0;} J、Time Management
Sample Input 1
5
2 4
1 12
4 5
7 10
7 8
Sample Output 1
3
思路:将完成时间按先后顺序排序,再判断开始时间是否重叠
#include<stdio.h>#include<stdlib.h>#include<string.h>int cmp(const void *p1,const void *p2);struct Node{ int a;//开始时间 int b;//结束时间}node[50000];int main(void){ int n; scanf("%d",&n); int i; for(i=0;i<n;i++){ scanf("%d%d",&node[i].a,&node[i].b); } qsort(node,n,sizeof(node[0]),cmp); int cnt=0; //最终过题数 int time=0; //时间初始化为0 for(i=0;i<n;i++){ if(node[i].a>=time){ time=node[i].b; cnt++; } } printf("%d",cnt); return 0;}int cmp(const void *p1,const void *p2){ struct Node *m=(struct Node*)p1; struct Node *n=(struct Node*)p2; return m->b-n->b; //根据结束时间排序} K、小布特烦恼
Sample Input 1
3
5
5 3 2 1 4
6
2 2 2 2 2 2
2
2 1
Sample Output 1
YES
YES
NO
思维题:n*(n-1)/2的值为冒泡排序的最大次数,因此直接判断是否为非单调递减
#include<stdio.h>int main(void){ int t; int a[50000]; int n,i; scanf("%d",&t); while(t--){ int flag=0; scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&a[i]); } for(i=0;i<n-1;i++){ if(a[i]<=a[i+1]){ flag=1; //如果有一项为递增,flag=1 break; } } if(flag) printf("YESn"); else printf("NOn"); //别漏回车 } return 0;} L、菜学长的糖糖
Sample Input 1
7 1 1 1 1 1 1 2
Sample Output 1
2
思维题:直接对所有数据进行异或运算(两两抵消)
#include<stdio.h>int main(void){ int n; scanf("%d",&n); int i,a,sum; for(i=0;i<n;i++){ scanf("%d",&a); if(i==0) sum=a; //这里注意让sum一开始等于第一项 else sum=sum^a; } printf("%d",sum); return 0;} M、水题
Sample Input 1
6
4 0
5 8
0 1000000
0 0
1 0
1000000 1000000
Sample Output 1
0
3
1000000
0
1
0
思维题:经分析,可分为两种情况:
1.n<=k,直接输出n。
2.n>k,如果n-k为奇数,结果为1;反之,结果为0