总结-

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\n");
35     else printf("No\n");
36   }
37 
38   return 0;
39 }
View Code

 

B-

B题感觉有数位DP的意思,又有点组合数学的意思。
这个选择不重合的意思在我看来就是我选出组成msc 和 mcc的位置不能重合,我们可以这么想,我们要
出现组成msc和mcc的问题,那么如何进行操作???选择一段区间,里面一定有大于等于2个m,大于一个s
大于等于3个c,想办法搞搞。。。
或者说,区间内部。。。不过暂时没有想出来,暂时留坑。