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 }
View Code

 

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 }
View Code

 

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 }
View Code

 

posted @ 2021-02-21 21:09  bonel  阅读(47)  评论(0)    收藏  举报