总结-
A-开始觉得是找规律,最开始模拟当时我觉得如果L达到1e9的范围的话,岂不是要加1e9次,模拟也就没有认真写,现在想来,后面由于加的不再是1,而是我前面的值,这样相当了一个斐波那契的类型,而斐波那契的增子速度是非常快的,因此时间复杂度并不是太高。
1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 #include<string.h> 5 #define ll long long 6 using namespace std; 7 int flag[3]; 8 int cnt=0; 9 int l; 10 void cmp(int x,int y,int z){ 11 if (x>l){ 12 flag[cnt++]=z; 13 return; 14 }else { 15 if (x>=y){ 16 cmp(y+x,x,!z); 17 }else if (x<y){ 18 if (y%x==0){ 19 cmp(y+y,x,!z); 20 }else { 21 cmp(y+(y/x+1)*x,x,!z); 22 } 23 } 24 } 25 } 26 int main(){ 27 int a,b; 28 while(~scanf("%d%d%d",&a,&b,&l)){ 29 cnt=0; 30 cmp(a,b,0); 31 cmp(b,a,1); 32 if (flag[0]==0)printf("Yes "); 33 else printf("No "); 34 if (flag[1]==0)printf("Yes "); 35 else printf("No "); 36 } 37 38 return 0; 39 }
B-
B题感觉有数位DP的意思,又有点组合数学的意思。
这个选择不重合的意思在我看来就是我选出组成msc 和 mcc的位置不能重合,我们可以这么想,我们要
出现组成msc和mcc的问题,那么如何进行操作???选择一段区间,里面一定有大于等于2个m,大于一个s
大于等于3个c,想办法搞搞。。。
或者说,区间内部。。。不过暂时没有想出来,暂时留坑。