TYVJ博弈论

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

TYVJ 1140  飘飘乎居士拯救MM

题解:

  歌德巴赫猜想

 #include <cmath>
#include <cstdio> int n, a, b, ta, tb; inline bool isPrime(int x){
if (x==) return true;
for (int i=; i<=sqrt(x); i++)
if (!(x%i)) return false;
return true;
} inline int getTime(int x){
if (isPrime(x)) return ;
if (isPrime(x-)) return ;
if (x& && isPrime(x-)) return ;
return x& ? : ;
} inline bool work(){
scanf("%d %d", &a, &b);
ta = b>a ? : ;
ta += getTime(a), tb = getTime(b);
return ta<=tb;
} int main(){
scanf("%d", &n);
while (n--)
if (work()) puts("YES");
else puts("NO");
}

TYVJ 1140

TYVJ 1420  红豆子和绿豆子

题解:

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

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

 #include <cstdio>
#define isDig (48<=c&&c<=57) char c;
bool cj; int main(){
do
c = getchar();
while (isDig); do
c = getchar();
while (!isDig); do {
if (isDig) cj = (c-)&;
c = getchar();
} while (isDig); puts(cj ? "Yes" : "No");
}

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,这时对方必败。

 #include <cstdio>
#include <cstring>
#define isDig (48<=c&&c<=57)
#define win (c-48==2||c-48==3||c-48==7||c-48==8) char c;
bool cj, anna; inline void work(){
do
c = getchar();
while (!isDig); do {
if (isDig) cj = win;
c = getchar();
} while (isDig); do
c = getchar();
while (!isDig); do {
if (isDig) anna = win;
c = getchar();
} while (isDig); puts(cj&&anna ? "Shadow" : "Matrix67");
} int main(){
for (int i=; i<; i++)
work();
}

TYVJ 1567

上一篇:两种判圈法——floyd和brent


下一篇:wordpress woodstock主题导入demo xml文件 execution time out