zoukankan      html  css  js  c++  java
  • 繁华模拟赛 奇怪的棋

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int maxn = 205;
    struct chs{
        int y;
        int x;
        
    };
    chs orz[3][maxn*maxn];
    int n,vis[maxn][maxn],cnt_op,cnt_no,cnt_ok;
    int dy,dx,ans;
    void input(){
        cin>>n;
        char cmd;
        for(int i = 1;i <= n;i++){
            for(int j = 1;j <= n;j++){
                scanf("%c",&cmd);
                while(cmd != 'o' && cmd != 'x' && cmd != '.') scanf("%c",&cmd);
                if(cmd == 'o'){
                    cnt_op++;
                    orz[0][cnt_op].y = i;
                    orz[0][cnt_op].x = j;
                }else if(cmd == 'x'){
                    cnt_ok++;
                    orz[1][cnt_ok].y = i;
                    orz[1][cnt_ok].x = j;
                }else if(cmd == '.'){
                    cnt_no++;
                    orz[2][cnt_no].y = i;
                    orz[2][cnt_no].x = j;
                }
            }
        }
    }
    void get_d(int y,int x,int ny,int nx){
        dy = n + ny - y;
        dx = n + nx - x;
    }
    void get_no(){
        for(int i = 1;i <= cnt_no;i++){
            for(int j = 1;j <= cnt_op;j++){
                get_d(orz[0][j].y,orz[0][j].x,orz[2][i].y,orz[2][i].x);
                vis[dy][dx] = 2;
            }
        }
    }
    bool get_ok(int dep){
        if(dep > cnt_ok){
            cout<<"YES"<<endl;
            for(int i = 1;i <= 2 * n - 1;i++){
                for(int j = 1;j <= 2 * n - 1;j++){
                    if(i == n && j == n) printf("o");
                    else if(vis[i][j] == 2) printf(".");
                    else printf("x");
                }
                printf("
    ");
            }
            return true;
        }
        int ndy,ndx;
        for(int i = 1;i <= cnt_op;i++){
            get_d(orz[0][i].y,orz[0][i].x,orz[1][dep].y,orz[1][dep].x);
            ndy = dy;
            ndx = dx;
            if(vis[ndy][ndx] != 2){
                vis[ndy][ndx] = 1;
                if(get_ok(dep+1)) return true;
                vis[ndy][ndx] = 0;
            }
        }
        return false;
    }
    int main(){
        freopen("chess.in","r",stdin);
        freopen("chess.out","w",stdout);
        input();
        get_no();
        if(!get_ok(1)) cout<<"NO";
        return 0;
    }
    
    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<vector>
    #include<queue>
    #include<map>
    #include<set>
    #include<stack>
    #include<cstdlib>
    #include<string>
    #include<bitset>
    #define INF 1000000000
    #define N 100005
    #define fi first
    #define se second
    #define debug(x) cout<<#x<<"="<<x<<endl
    #define MP(x,y) make_pair(x,y)
    using namespace std;
    typedef long long LL;
    typedef pair<int,int> pii;
    int z,n,ans[105][105];
    char mp[55][55];
    bool vis[55][55];
    bool check(int x,int y)
    {
        if(x>0&&y>0&&x<=n&&y<=n)
            return 1;
        return 0;
    }
    int main()
    {
        int i,j,r,c,now,tx,ty;
        freopen("chess.in","r",stdin);
        freopen("chess.out","w",stdout);
        cin>>n;
        for(i=1;i<=n;i++)
            scanf("%s",mp[i]+1);
        for(i=-n+1;i<n;i++)
            for(j=-n+1;j<n;j++)
            {
                now=0;
                for(r=1;r<=n;r++)
                    for(c=1;c<=n;c++)
                        if(mp[r][c]=='o')
                        {
                            tx=r+i,ty=c+j;
                            if(check(tx,ty))
                                if(mp[tx][ty]=='.')
                                    if(!now)
                                        now=-1;
                        }
                ans[i+n][j+n]=now;
                if(now!=-1)
                {
                    for(r=1;r<=n;r++)
                    for(c=1;c<=n;c++)
                        if(mp[r][c]=='o')
                        {
                            tx=r+i,ty=c+j;
                            if(check(tx,ty))
                                vis[tx][ty]=1;
                        }
                }
            }
        for(r=1;r<=n;r++)
            for(c=1;c<=n;c++)
                if(mp[r][c]=='x'&&!vis[r][c])
                {
                    printf("NO
    ");
                    return 0;
                }
        printf("YES
    ");
        for(i=1;i<n*2;i++)
        {
            for(j=1;j<n*2;j++)
            {
                if(i==n&&j==n)
                {
                    printf("o");
                    continue;
                }
                if(ans[i][j]<0)
                    printf(".");
                else printf("x");
            }
            cout<<endl;
        }
        return 0;
    }
    // davidlee1999WTK 2015/
    // srO myk Orz
    //ios::sync_with_stdio(false);
  • 相关阅读:
    Fortify Audit Workbench Cookie Security: Cookie not Sent Over SSL
    Fortify Audit Workbench 笔记 Access Control: Database
    MATLAB中的polyfit函数的使用方法
    编写python代码时出现SyntaxError: invalid character in identifier的解决方法
    Windows10安装MinGW-W64出现Cannot download repository.txt的一种解决方法
    使用IDM下载B站视频出现声音跟视频分离的一种解决方法
    简洁桌面(使用Windows自带的桌面整理功能)
    MATLAB标记图像中特殊的点
    解决python使用pip安装下载库出现错误:ERROR:Cannot unpack file xxxx情况
    解决python使用pip下载安装库速度慢问题
  • 原文地址:https://www.cnblogs.com/hyfer/p/5875176.html
Copyright © 2011-2022 走看看