2021.02.21cf补题
B. National Project
题意:总长度为n的公路进行维修,天气是有规律性的,连续g天的好天气,连续b天的坏天气,必须在好天气进行维护,问至少维护n的一半,那么至少需要多少天
思路:必须是g的整数倍和b的整数倍构成的天数,通过相除,假设g+b是一组,最后尾巴那算作单算
想法:1)这个数必须是g的整数倍和b的整数倍构成的,或者是直接输出n,这个限制条件是题目中没有提到,但是你必须写的
代码:
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<cmath> 5 #include<cstring> 6 using namespace std; 7 const int maxx=1e5+10; 8 int main(){ 9 int t; 10 scanf("%d",&t); 11 while(t--){ 12 long long int a,b,c; 13 long long int aa; 14 scanf("%lld %lld %lld",&a,&b,&c); 15 16 aa=a; 17 if(a%2==1){ 18 a/=2; 19 a++; 20 }else{ 21 a/=2; 22 } 23 24 if(a%b==0){ 25 long long int sum=0; 26 sum=a/b*(b+c); 27 sum-=c; 28 printf("%lld\n",max(sum,aa)); 29 }else{ 30 long long int sum=0; 31 sum=a/b*(b+c); 32 sum+=a%b; 33 printf("%lld\n",max(sum,aa)); 34 } 35 } 36 37 }
A. Common Subsequence(Codeforces Round #658 (Div. 2))
题目:题目很混乱,直接题目模糊样例入手调查猜想
思路:找两个数组中有没有共同元素,如果有直接输出1和这个元素值,如果没有就直接输出NO
代码:
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<cmath> 5 #include<cstring> 6 using namespace std; 7 int main(){ 8 int t; 9 scanf("%d",&t); 10 while(t--){ 11 int n,m; 12 scanf("%d %d",&n,&m); 13 int a[1500],b[1500]; 14 for(int i=0;i<n;i++){ 15 scanf("%d",&a[i]); 16 } 17 for(int i=0;i<m;i++){ 18 scanf("%d",&b[i]); 19 } 20 int flag=0; 21 int ii=0,jj=0; 22 for(int i=0;i<n;i++){ 23 flag=0; 24 for(int j=0;j<m;j++){ 25 if(a[i]==b[j]){ 26 flag=1; 27 ii=i; 28 jj=j; 29 break; 30 } 31 } 32 if(flag==1){ 33 break; 34 } 35 } 36 if(flag==0){ 37 printf("NO\n"); 38 }else{ 39 printf("YES\n"); 40 printf("1 %d\n",a[ii]); 41 } 42 } 43 }
B. Sequential Nim
题目:取牌,分为先手和后手,问谁先取完
思路:就是看谁先取到第一个非1的数,谁就赢了
代码:
1 #include<iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<cmath> 5 #include<cstring> 6 using namespace std; 7 const int maxx=1e5+10; 8 int main(){ 9 int t; 10 scanf("%d",&t); 11 while(t--){ 12 int n; 13 scanf("%d",&n); 14 int a[maxx]; 15 int flag=0; 16 int sum=0; 17 for(int i=0;i<n;i++){ 18 scanf("%d",&a[i]); 19 } 20 if(n==1){ 21 printf("First\n"); 22 continue; 23 } 24 for(int i=0;i<n;i++){ 25 if(a[i]==1){ 26 sum+=1; 27 } 28 if(a[i]!=1){ 29 sum++; 30 break; 31 } 32 } 33 if(sum%2==1){ 34 printf("First\n"); 35 }else{ 36 printf("Second\n"); 37 } 38 39 } 40 }

浙公网安备 33010602011771号