繁华模拟赛 奇怪的棋
Posted ACforever
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了繁华模拟赛 奇怪的棋相关的知识,希望对你有一定的参考价值。
#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("\n"); } 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\n"); return 0; } printf("YES\n"); 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);
以上是关于繁华模拟赛 奇怪的棋的主要内容,如果未能解决你的问题,请参考以下文章