您的位置:首页 > 其它

Xiangqi UVA - 1589

2017-03-11 17:32 288 查看
https://vjudge.net/problem/UVA-1589

待测:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <map>
#include <algorithm>
#include <string>
#include <set>
#include <sstream>
using namespace std;
#define maxn 25
int d[20][20];
void run()
{
int i=0,j=0;
while(i<=9)
{
d[i][0]=1;
d[0][i]=1;
d[11][i]=1;
d[i][10]=1;
i++;
}
}

void ma(int x,int y)
{
if(d[x+1][y]!=1)
{
d[x+2][y+1]=2;
d[x+2][y-1]=2;
}

if(d[x-1][y]!=1)
{
d[x-2][y+1]=2;
d[x-2][y-1]=2;
}

if(d[x][y+1]!=1)
{
d[x-1][y+2]=2;
d[x+1][y+2]=2;
}

if(d[x][y-1]!=1)
{
d[x+1][y-2]=2;
d[x-2][y-2]=2;
}
}

void che(int x,int y)
{
int l=0;
while(l<11)
{
d[l][y]=2;
d[x][l]=2;
l++;
}
}

void pao(int x,int y)
{
int l;
l=x+1;
while(l<11&&d[l][y]!=1) l++;
while(l<11) d[l++][y]=2;
l=x-1;
while(l>0&&d[l][y]!=1) l--;
while(l>0) d[l--][y]=2;

l=y+1;
while(l<10&&d[x][l]!=1) l++;
while(l<10) d[x][l++]=2;
l=y-1;
while(l>0&&d[l][y]!=1) l--;
while(l>0) d[l--][y]=2;
}

void shuai(int x,int y)
{
int l=x-1;
int z=1;
while(l>0)
{
if(d[l--][y]!=0) z=0;
}
if(z)
{
l=x;
while(l>0)
{
d[l--][y]=2;
}
}
}
int run(int x,int y)
{
if(d[x+1][y]!=0) return 0;
if(d[x-1][y]!=0) return 0;
if(d[x][y-1]!=0) return 0;
if(d[x][y+1]!=0) return 0;
return 1;
}

int main()
{
int n,t,g;
while(cin>>n>>t>>g&&n+t+g)
{
run();
int x,y;
char a;
for(int i=0;i<n;i++)
{
cin>>a>>x>>y;
d[x][y]=1;
if(a=='R')
che(x,y);

if(a=='H')
ma(x,y);

if(a=='C')
pao(x,y);

if(a=='G')
{
shuai(x,y);
}

//cout<<'z'<<endl;
}

/*
for(int i=0;i<=10;i++)
for(int j=0;j<=11;j++)
cout<<d[i][j]<<' ';
cout<<endl;
*/

if(run(x,y)) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
memset(d,0,sizeof(d));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: