暑假集训day11

Posted Yzyet

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了暑假集训day11相关的知识,希望对你有一定的参考价值。

时间回到昨天。

今天学了一个超丧的东西——博弈论

倒是挺有趣的。

Treblecross(UVA_10561)

这题细节很多,de了一天的bug

话说博弈论的代码不是都不超过50行的吗、、、、

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int sg[201],used[201],T,ans,hh[201],len;char c[201];
void init(int n){
    memset(sg,0,sizeof(sg));
    sg[1]=sg[2]=sg[3]=1;
    for(int i=4;i<=n;i++){
        memset(used,0,sizeof(used));
        for(int j=1;j<=(i+1)/2;j++){
            int tmp=sg[i-j-2];
            if(j>3)tmp^=sg[j-3];
            used[tmp]=1;
        }
        for(int j=0;j<=n;j++)if(!used[j]){sg[i]=j;break;}
    }
}
int can(int n){
    for(int i=n-2;i<=n+2;i++){
        if(i<0||i>=len)continue;
        if(c[i]==\'X\')return 0;
    }
    return 1;
}
void print(){
    puts("WINNING");int t=0;
    for(int i=0;i<len;i++)if(hh[i]){if(t)printf(" ");printf("%d",i+1);t=1;}
    puts("");
}
int main()
{
    init(200);scanf("%d",&T);
    while(T--){
        scanf("%s",c);
        ans=0;memset(hh,0,sizeof(hh));
        len=strlen(c);bool win=0;
        for(int i=0;i<len-2;i++){
            if(c[i]==\'X\'){
                if(c[i+1]==\'X\')hh[i+2]=1,win=1;
                if(c[i+2]==\'X\')hh[i+1]=1,win=1;
            }if(c[i+1]==\'X\'&&c[i+2]==\'X\')hh[i]=1,win=1;
        }
        if(win){print();continue;}
        for(int i=0;i<len;i++){
            if(!can(i))continue;
            int tmp=0,last=-3;
            for(int j=0;j<len;j++)
                if(c[j]==\'X\'||j==i){
                    if(j-last-5>0)tmp^=sg[j-last-5];
                    last=j;//printf("i%d j%d t%d\\n",i+1,j+1,tmp);
                }
            if(len-last>3)tmp^=sg[len-last-3];//printf("i%d t%d\\n",i+1,tmp);
            if(!tmp)hh[i]=1,win=1;
        }
        if(win)print();
        else puts("LOSING\\n");
    }
    return 0;
}

ENimEN(UVA_11892)

这题就很水了,还有下题

#include<iostream>
#include<cstdio>
using namespace std;
inline int read(){
    int num=0,t=1;char c=getchar();
    while(c>\'9\'||c<\'0\'){if(c==\'-\')t=-1;c=getchar();}
    while(c>=\'0\'&&c<=\'9\'){num=(num<<3)+(num<<1)+c-\'0\';c=getchar();}
    return num*t;
}
int main()
{
    int T=read();
    while(T--){
        int n=read(),a,sum=0;
        for(int i=1;i<=n;i++){
            a=read();if(a==1)sum++;
        }
        if(sum==n&&sum%2==0)puts("piloop");
        else puts("poopi");
    }
    return 0;
}

A Funny Game(poj_2484)

#include<cstdio>
int main(){
    while(1){
        int n;scanf("%d",&n);if(!n)break;
        if(n<3)puts("Alice");
        else puts("Bob");
    }
    return 0;
}

本文由Yzyet编写,网址为www.cnblogs.com/Yzyet。非Yzyet同意,禁止转载,侵权者必究。

以上是关于暑假集训day11的主要内容,如果未能解决你的问题,请参考以下文章

2018暑假集训 DAY5 T4 幂运算

暑假集训Day22 B (Lucas+SOSDP)

2021年SWPUACM暑假集训day1二分算法

暑假集训day5

暑假集训day7

暑假集训day3