Xiangqi UVA - 1589
2018-01-28 13:40
537 查看
大致说一下意思,一个黑将,然后红方已经将军了,现在轮到黑棋走,问黑棋还有没有活路了。
心路历程:
1.1月26号凌晨开始琢磨的,拿到题写了五十行,走的是把3*3将可以走的格子标记的办法,当时感觉有点问题,后来考虑到吃子的情况,扔了睡觉。
2.好吧,我没睡着,两点多爬起来写了两句思路。
3.周六走了一天的亲戚,写的伪代码,基本确定走点的办法。
4.晚上开始写......,wa,本人比较懒,直接去DEBUG找的前人的小样。发现走炮有点问题,改了改,最后对上了(很长的那个),一脸兴奋提交,wa。
5.走马的时候有问题,改了改,RE。
6.RE无限连,搁一搁,做洪水题(4-10例题),qsort死活过不去,都方了,最后快排没办法了。
7.早上起来(十点多),把走马的程序扔了,直接往上交(确定RE),发现还是RE,看了一遍panduan函数,j写成i......
8.交上去还错,再找(wa了,一脸激动,好歹不RE......),把scanf改成了gets和sscanf,AC,(输入有空行)
9.菜,菜,菜,一道题干了三天。
好了,感谢听我说完这一堆废话,下面讲一下思路,确定五个点,将和它的上下左右,然后五个点直接扔进函数判断,马最后判断。具体就不罗嗦了,注释写的反正我找RE的时候看得挺懂的.......#include<stdio.h>
#include<string.h>
#include<stdlib.h>
using namespace std;
int s[110][100];
char s1[110][100];
bool pdma(const int a,const int b)
{
if(a==1)
{
if(s[a+1][b-2] && s1[a+1][b-2]=='H' && !s[a+1][b-1])return 1;//左下
if(s[a+2][b-1] && s1[a+2][b-1]=='H' && !s[a+1][b-1])return 1;//下左
if(s[a+2][b+1] && s1[a+2][b+1]=='H' && !s[a+1][b+1])return 1;//下右
if(s[a+1][b+2] && s1[a+1][b+2]=='H' && !s[a+1][b+1])return 1;//右下
}
else if(a==2)
{
if(s[a+1][b-2] && s1[a+1][b-2]=='H' && !s[a+1][b-1])return 1;//左下
if(s[a+2][b-1] && s1[a+2][b-1]=='H' && !s[a+1][b-1])return 1;//下左
if(s[a+2][b+1] && s1[a+2][b+1]=='H' && !s[a+1][b+1])return 1;//下右
if(s[a+1][b+2] && s1[a+1][b+2]=='H' && !s[a+1][b+1])return 1;//右下
if(s[a-1][b-2] && s1[a-1][b-2]=='H' && !s[a-1][b-1])return 1;//左上
if(s[a-1][b+2] && s1[a-1][b+2]=='H' && !s[a-1][b+1])return 1;//右上
}
else if(a==3)
{
if(s[a+1][b-2] && s1[a+1][b-2]=='H' && !s[a+1][b-1])return 1;//左下
if(s[a+2][b-1] && s1[a+2][b-1]=='H' && !s[a+1][b-1])return 1;//下左
if(s[a+2][b+1] && s1[a+2][b+1]=='H' && !s[a+1][b+1])return 1;//下右
if(s[a+1][b+2] && s1[a+1][b+2]=='H' && !s[a+1][b+1])return 1;//右下
if(s[a-1][b-2] && s1[a-1][b-2]=='H' && !s[a-1][b-1])return 1;//左上
if(s[a-1][b+2] && s1[a-1][b+2]=='H' && !s[a-1][b+1])return 1;//右上
if(s[a-2][b-1] && s1[a-2][b-1]=='H' && !s[a-1][b-1])return 1;//上左
if(s[a-2][b+1] && s1[a-2][b+1]=='H' && !s[a-1][b+1])return 1;//上右
}
return 0;
}
bool panduan(const int a,const int b)
{
if(a==0||a>3||b<4||b>6)return 1;//不在3*3内
int i,j;
int flag=0;
for(i=b-1; i>0; i--) //左横
{
if(s[a][i]==1)
{
if(s1[a][i]=='R')
{
return 1;
}
flag=1;
break;
}
}
if(flag==1)
for(j=i-1; j>0; j--) //判断炮
{
if(s[a][j]==1){
if(s1[a][j] == 'C')
return 1;
else break;}
}
flag=0;
for(i=b+1; i<10; i++) //右横
{
if(s[a][i]==1)
{
if(s1[a][i]=='R')
{
return 1;
}
flag=1;
break;
}
}
if(flag==1)
for(j=i+1; j<10; j++) //判断炮
{
if(s[a][j]==1 ){
if(s1[a][j] == 'C')
return 1;
else break;
}
}
flag=0;
for(i=a-1; i>0; i--) //上竖
{
if(s[i][b]==1)
{
if(s1[i][b]=='R')
return 1;
flag=1;
break;
}
}
if(flag==1)//判断炮
for(j=i-1; j>0; j--)
{
if(s[j][b]==1 ){
if(s1[j][b] == 'C')
return 1;
else break;
}
}
flag=0;
for(i=a+1; i<11; i++) //下竖判断
{
if(s[i][b])
{
if(s1[i][b]=='R'||s1[i][b]=='G')
return 1;
flag=1;
break;
}
}
if(flag==1)
for(j=i+1; j<11; j++) //判断炮
{
if(s[j][b]){
if(s1[j][b]=='C')
return 1;
else break;
}
}
return pdma(a,b);
}
int main()
{
//freopen("in.txt","r",stdin);
int N,heicolumn,heirow;//判断五个位置
int x,y;
char c;
int djk;
char xyz[101];
while(scanf("%d %d %d",&N,&heicolumn,&heirow)==3)
{
if(!N)return 0;
memset(s,0,sizeof(s));
memset(s1,'\0',sizeof(s1));
getchar();
while(N--)
{
gets(xyz);
sscanf(xyz,"%c %d %d",&c,&x,&y);
//sscanf(xyz,"%c %d %d",&c,&x,&y);
s[x][y]=1;
s1[x][y]=c;
}
djk=0;
if(panduan(heicolumn,heirow) && panduan(heicolumn+1,heirow) && panduan(heicolumn-1,heirow) && panduan(heicolumn,heirow+1) && panduan(heicolumn,heirow-1))djk++;
//if(panduan(heicolumn+1,heirow) )djk++;
//if(panduan(heicolumn-1,heirow) )djk++;
//if(panduan(heicolumn,heirow+1) )djk++;
//if(panduan(heicolumn,heirow-1) )djk++;
if(djk)printf("YES\n");
else printf("NO\n");
}
return 0;
}
不要问我std是什么情况,RE乱投医/......
相关文章推荐
- 紫书章四习题一 xiangqi uva 1589(模拟)
- uva 1589 - Xiangqi
- UVa 1589 - Xiangqi <细节基础题>
- uva 1589 xiangqi
- 算法竞赛入门经典第四章习题4-1 Xiangqi UVA - 1589
- ●UVa 1589 Xiangqi(模拟)
- UVA 1589:Xiangqi (模拟 Grade D)
- 紫书章四习题一 xiangqi uva 1589(模拟)
- UVA 1589 Xiangqi 直接模拟 提交了近50次要跪。。
- UVa 1589 - Xiangqi <细节基础题>
- Uva 1589 Xiangqi 判断是否将死
- UVA 1589 xiangqi
- 紫书章四习题一 xiangqi uva 1589(模拟)
- uva 1589 - Xiangqi(象棋)
- UVa 1589 - Xiangqi
- Uva 1589 Xiangqi
- UVA - 1589 Xiangqi
- 紫书章四习题一 xiangqi uva 1589(模拟)
- UVA 1589 Xiangqi
- 紫书章四习题一 xiangqi uva 1589(模拟)