zoukankan      html  css  js  c++  java
  • 1195. Ouths and Crosses 夜

    http://acm.timus.ru/problem.aspx?space=1&num=1195

    题目很简单 但是写了一下午 原因是理解错了题意 (英语不好,伤不起呀)

    题目大意:

    以五子棋为背景 这不过这里是 "三子棋"  而且每个人已经走了三步 

    问剩下的 两个人都选择最优走法 谁获胜 还是平局

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<vector>
    #include<queue>
    #include<map>
    #include<stack>
    #include<algorithm>
    #include<cmath>
    
    using namespace std;
    //#pragma comment(linker,"/STACK:1000000000,1000000000")
    
    #define LL long long
    
    const int INF=0x3f3f3f3f;
    //const int N=100005;
    string s;
    int mov[10][8];
    int dfso();
    bool threeline(char w)
    {
        for(int i=0;i<9;++i)
        {
            if(s[i]!=w)
            continue;
            for(int j=0;j<8;j+=2)
            if(mov[i][j]!=-1&&s[mov[i][j]]==w&&mov[i][j+1]!=-1&&s[mov[i][j+1]]==w)
            return true;
        }
        return false;
    }
    int dfsc()
    {
        if(threeline('O'))
        return 0;
        int k=3;
        for(int i=0;i<9;++i)
        {
            if(s[i]=='#')
            {
                s[i]='X';
                k=min(k,dfso());
                s[i]='#';
            }
            if(!k)break;
        }
        if(k==0)
        return 2;
        else if(k==2)
        return 0;
        return 1;
    }
    int dfso()
    {
        if(threeline('X'))
        return 0;
        int k=3;
        for(int i=0;i<9;++i)
        {
            if(s[i]=='#')
            {
                s[i]='O';
                k=min(k,dfsc());
                s[i]='#';
            }
            if(!k) break;
        }
        if(k==0)
        return 2;
        else if(k==2)
        return 0;
        return 1;
    }
    void ready()
    {
        int x[8]={0,0,1,-1,-1,1,-1,1};
        int y[8]={1,-1,0,0,-1,1,1,-1};
        for(int i=0;i<3;++i)
        {
            for(int j=0;j<3;++j)
            {
                int t=i*3+j;
                int l1,l2;
                for(int l=0;l<8;++l)
                {
                    l1=i+x[l];
                    l2=j+y[l];
                    if(l1>=0&&l1<3&&l2>=0&&l2<3)
                    mov[t][l]=l1*3+l2;
                    else
                    mov[t][l]=-1;
                }
            }
        }
    }
    int main()
    {
        //freopen("data.txt","r",stdin);
        ready();
        string stmp;
        s.clear();
        for(int i=0;i<3;++i)
        {
            cin>>stmp;
            s+=stmp;
        }
        int k=dfsc();
        if(k==0)
        cout<<"Ouths win"<<endl;
        else if(k==2)
        cout<<"Crosses win"<<endl;
        else
        cout<<"Draw"<<endl;
        //system("pause");
        return 0;
    }
    
     
  • 相关阅读:
    pku2992 Divisors
    pku3090 Visible Lattice Points
    pku3615 Cow Hurdles
    禁止 verifier.dll 监控程序
    运行ogreSDK的samples
    #pragma pack(n) 啥时候可以不再忘记?
    游戏开发流程图。
    希望可以尽快的写篇自己的成果。
    windows与OS X下的std::string
    VS2008鼠标右键不灵敏,TFS的Local Path无法打开对应文件夹
  • 原文地址:https://www.cnblogs.com/liulangye/p/2729878.html
Copyright © 2011-2022 走看看