Gym - 101775L SOS (博弈,找规律)

题目链接(vj)

题意:两人分别向一列长度为n的方格中填S或者O,先填出SOS的胜,填满无人胜利则为平局。给出长度n,问先手是胜还是负或者平局。

推不出规律来,就只好打表找规律了。打出来发现7之前全是0,7-15的时候1和0交替,16以后就是1和-1交替了。由于时空限制,本蒟蒻最多只能打到20,期待神犇能找到更有效的打表方式。

solution:

#define FRER() freopen("i.txt","r",stdin)
#include

using namespace std;
typedef long long ll;
int kase;

int main()
{
    //FRER();
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        printf("Case #%d: ",++kase);
        if(n&1&&n>=7)printf("Panda\n");
        else printf(n<16?"Draw\n":"Sheep\n");
    }
    return 0;
}
//

打表代码:

#define FRER() freopen("i.txt","r",stdin)
#include

using namespace std;
typedef long long ll;
const int INF=0x3f;
const unsigned int M=1e9+9e8;
const int N=100;

int a[N],n,cnt;
char mp[M];
unsigned int state()
{
    unsigned int ret=0;
    for(int i=0; i=n)return 0;
    unsigned st=state();
    if(mp[st]^INF)return mp[st];
    bool flag=false;
    for(int i=0; i

注意不要打到16以下就停了,否则就掉坑里了...

你可能感兴趣的:(博弈)