UVA1589xiangqi(模拟)
来源:互联网 发布:恺英网络市值 编辑:程序博客网 时间:2024/05/18 02:37
题目:给你一盘红方已经对黑方“将军”的局,黑方只剩下将,红方还有很多棋子。下一步该黑方走,问红方是否将黑方将死。
debug了一天wa了9发= =非常吐血,其实很多人1A了 我却wa了9发
总的来说模拟的思路:
现将棋盘读入,然后将每一个红方棋子能够吃到的位置都标记起来,最后判断黑方将能去的位置是否会被吃掉。
有一部分wa时没注意要把棋盘读完才能开始标记,因为红色棋子之间会相互影响。
没有其他的理由。。。就是想发上来祭奠一下手残和脑残少女。。。。可能没睡够。。。。
// Created by ZYD in 2015.// Copyright (c) 2015 ZYD. All rights reserved.//#include <cstdio>#include <cstdlib>#include <iostream>#include <algorithm>#include <cstring>#include <climits>#include <string>#include <vector>#include <cmath>#include <stack>#include <queue>#include <set>#include <map>using namespace std;#define Size 100000#define ll long long#define mk make_pair#define pb push_back#define mem(array) memset(array,0,sizeof(array))typedef pair<int,int> P;char mp[50][50];int can[50][50];int n,m,x,y,bx,by,ans,fx,fy;char ch;int xx[4]={-1,0,1,0};int yy[4]={0,-1,0,1};//int gx[8]={-1,-1,-1,0,1,1,1,0};//int gy[8]={1,0,-1,-1,-1,0,1,1};int hx[4][2]={-2,-2,-1,1,2,2,-1,1};int hy[4][2]={-1,1,-2,-2,-1,1,2,2};void pHorse(int x,int y){ for(int i=0;i<4;i++){ int nx=x+xx[i]; int ny=y+yy[i]; if(mp[nx][ny]==' '){ for(int j=0;j<2;j++){ int nnx=x+hx[i][j]; int nny=y+hy[i][j]; if(nnx>=1&& nnx<=10&& nny>=1 && nny<=9) can[nnx][nny]=1; } } }}void pCannon(int i,int j){ int k; //cout<<i<<' '<<j<<endl; for(k=i-1;k>=1;k--){ if(mp[k][j]!=' ') break; } k--;//cout<<k<<endl; for(;k>=1;k--){ can[k][j]=1; if(mp[k][j]!=' ') break; } for(k=i+1;k<=10;k++){ if(mp[k][j]!=' ') break; } k++; for(;k<=10;k++){ can[k][j]=1; if(mp[k][j]!=' ') break; } for(k=j-1;k>=1;k--) if(mp[i][k]!=' ')break; k--; for(;k>=1;k--){ can[i][k]=1; if(mp[i][k]!=' ') break; } for(k=j+1;k<=9;k++) if(mp[i][k]!=' ') break; k++; for(;k<=9;k++){ can[i][k]=1; if(mp[i][k]!=' ') break; }}void pR(int i,int j){ //cout<<'R'<<endl; for(int k=i-1;k>=1;k--){ can[k][j]=1; if(mp[k][j]!=' ')break; } for(int k=i+1;k<=10;k++){ can[k][j]=1; if(mp[k][j]!=' ') break; } for(int k=j-1;k>=1;k--){ can[i][k]=1; if(mp[i][k]!=' ') break; } for(int k=j+1;k<=9;k++){ can[i][k]=1; if(mp[i][k]!=' ') break; }}bool no(int fx,int fy,int x,int y){ if(fy!=y) return true; for(int i=x+1;i<fx;i++){ if(mp[i][y]!=' ') return true; } return false;}int main(){ freopen("in.txt","r",stdin); while(~scanf("%d%d%d\n",&n,&bx,&by)&& n&& bx && by){ mem(can); for(int i=1;i<=10;i++) for(int j=1;j<=9;j++) mp[i][j]=' '; for(int i=1;i<=n;i++){ scanf("%c %d %d\n",&ch,&x,&y); mp[x][y]=ch; } for(int i=1;i<=10;i++) for(int j=1;j<=9;j++){ if(mp[i][j]=='C'){ pCannon(i,j); } if(mp[i][j]=='H'){ pHorse(i,j); } if(mp[i][j]=='G') { fx=i; fy=j; } if(mp[i][j]=='R'){ //cout<<'R'<<endl; //cout<<i<<' '<<j<<endl; pR(i,j); } } int flag=0; for(int i=0;i<4;i++){ int nx=bx+xx[i]; int ny=by+yy[i]; if(can[nx][ny]==0&& nx>=1&& nx<=3&&ny>=4&&ny<=6&& no(fx,fy,nx,ny)){ //cout<<nx<<' '<<ny<<endl; flag=1; break; } } if(flag==1) cout<<"NO"<<endl; else cout<<"YES"<<endl; /* for(int i=1;i<=10;i++){ for(int j=1;j<=9;j++) cout<<can[i][j]<<" "; cout<<endl; } cout<<"*****"<<endl;*/ } return 0;}
0 0
- UVA1589xiangqi(模拟)
- UVA1589xiangqi
- 特长生模拟 BIOtech(模拟)
- 模拟鼠标键盘操作(硬件模拟)
- 模拟实现通讯录<二>(动态模拟)
- 【NOIP 模拟题】[T1]return(模拟)
- [模拟](JZOJ)【普及模拟】蚂蚁
- (noip 模拟 化简)<惊天大模拟>
- 【JZOJ5343】【NOIP模拟】健美猫(模拟)
- MSN 界面 模拟 (-)
- 模拟退火(SA)
- poj 3325(模拟)
- POJ 1008(模拟)
- Zigzag Matrix(模拟)
- pku3289Moonshine(模拟问题)
- hdu 3347(模拟)
- hdu 3344(模拟)
- hdu 2142 (模拟,,,)
- XIB文件上UIScrollView的约束
- [网络流]poj1698 Alice's chance
- HDU1551
- 用Matlab来备份文件夹
- 2015ACM沈阳赛区网络赛1003题
- UVA1589xiangqi(模拟)
- 2016暑期集训---搜索(简单BFS)
- java高级特性之多线程
- 不同类型数据间的转换
- 1113 Wall
- unity3d培训_005
- pullToRefresh的使用(1) ListView的上拉加载
- 线程池
- Poj2186 Popular Cows