一些比较水的博弈论...(为什么都没有用到那什么SG呢....)

 

TYVJ 1140  飘飘乎居士拯救MM

题解:

  歌德巴赫猜想

 1 #include <cmath>
 2 #include <cstdio>
 3 
 4 int n, a, b, ta, tb;
 5 
 6 inline bool isPrime(int x){
 7     if (x==1) return true;
 8     for (int i=2; i<=sqrt(x); i++)
 9         if (!(x%i)) return false;
10     return true;
11 }
12 
13 inline int getTime(int x){
14     if (isPrime(x)) return 1;
15     if (isPrime(x-1)) return 2;
16     if (x&1 && isPrime(x-2)) return 2;
17     return x&1 ? 3 : 2;    
18 }
19 
20 inline bool work(){
21     scanf("%d %d", &a, &b);
22     ta = b>a ? 1 : 0;
23     ta += getTime(a), tb = getTime(b);
24     return ta<=tb;
25 }
26 
27 int main(){
28     scanf("%d", &n);
29     while (n--)
30         if (work()) puts("YES");
31         else puts("NO");
32 }
TYVJ 1140

 

TYVJ 1420  红豆子和绿豆子

题解:

  看完题后发现判断绿豆的奇偶就行了

  开始有个点WA了看了下数据遭吓到了...数据范围都不告诉简直坑

 1 #include <cstdio>
 2 #define isDig (48<=c&&c<=57)
 3 
 4 char c;
 5 bool cj;
 6 
 7 int main(){
 8     do 
 9         c = getchar();
10     while (isDig);
11 
12     do 
13         c = getchar();
14     while (!isDig);
15 
16     do {
17         if (isDig) cj = (c-48)&1;
18         c = getchar();
19     } while (isDig);
20     
21     puts(cj ? "Yes" : "No");
22 }
TYVJ 1420

 

TYVJ 1567  吃糖果游戏

题解: 

  数学归纳法:借用题解里的话

    设a=[2,3,7,8]
    设b=[1,4,5,6,9,10]
    如果两个数都可写为10i+a的形式,设吃掉了第一个数,留下的第二个数10i+a,这时你无论怎么分,分出来的两个数一定有一个属于10i+b的形式。
    而我们发现每个b都能写成两个a的形式。

    因此如果两个数都是10i+a的形式,经过一轮之后回到手里的还是10i+a,所以必败。
    但如果两个数中有一个数不是10i+a,这时可以把另外一个吃掉,然后把这个数分成两个10i+a,这时对方必败。

 1 #include <cstdio>
 2 #include <cstring>
 3 #define isDig (48<=c&&c<=57)
 4 #define win (c-48==2||c-48==3||c-48==7||c-48==8)
 5 
 6 char c;
 7 bool cj, anna;
 8 
 9 inline void work(){
10     do 
11         c = getchar();
12     while (!isDig);
13     
14     do {
15         if (isDig) cj = win;
16         c = getchar();
17     } while (isDig);
18 
19 
20     do 
21         c = getchar();
22     while (!isDig);
23     
24     do {
25         if (isDig) anna = win;
26         c = getchar();
27     } while (isDig);
28     
29     puts(cj&&anna ? "Shadow" : "Matrix67");
30 }
31 
32 int main(){
33     for (int i=0; i<10; i++)
34         work();
35 }
TYVJ 1567

 

Posted on 2014-08-15 12:02  cjhahaha  阅读(213)  评论(0编辑  收藏  举报