题目:10196 - Check The Check

思路:水题。。模拟

这个代码,前半部分是在数统机房上课的时候写的,挫了点,懒得改了。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <map>
using namespace std;
int dir[8][2]={1,0,1,1,0,1,-1,1,-1,0,-1,-1,0,-1,1,-1};
int move[8][2]={2,1,1,2,-1,2,-2,1,-1,-2,-2,-1,1,-2,2,-1};
char s[9][9];
int cas=0;
int main()
{
while(1)
{
int ans=0;
for(int i=0;i<8;i++)
{
gets(s[i]);
for(int j=0;j<8;j++)
if(s[i][j]=='.')
ans++;
}
if(ans==64)
break;
int ctag=0;
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
{
if(s[i][j]=='.')
;
else if(s[i][j]=='b')
{
bool t_left=1,t_right=1;
// down
for(int k=1;;k++)
{
if(i+k<8)
{
if(t_left&&j-k>=0)
{
if(s[i+k][j-k]=='K')
{
ctag=1;/// black win
break;
}
else if(s[i+k][j-k]!='.')
{
t_left=0;
}
}
}
else
break;
}
for(int k=1;;k++)
{
if(i+k<8)
{
if(t_right&&j+k<8)
{
if(s[i+k][j+k]=='K')
{
ctag=1; /// black win
break;
}
else if(s[i+k][j+k]!='.')
{
t_right=0;
}
}
}
else
break;
}
// up
t_right=1,t_left=1;
for(int k=1;;k++)
{
if(i-k>=0)
{
if(t_left&&j-k>=0)
{
if(s[i-k][j-k]=='K')
{
ctag=1;/// black win
break;
}
else if(s[i-k][j-k]!='.')
{
t_left=0;
}
}
}
else
break;
}
for(int k=1;;k++)
{
if(i-k>=0)
{
if(t_right&&j+k<8)
{
if(s[i-k][j+k]=='K')
{
ctag=1; /// black win
break;
}
else if(s[i-k][j+k]!='.')
{
t_right=0;
}
}
}
else
break;
}
}
else if(s[i][j]=='B')
{
bool t_left=1,t_right=1;
// down
for(int k=1;;k++)
{
if(i+k<8)
{
if(t_left&&j-k>=0)
{
if(s[i+k][j-k]=='k')
{
ctag=-1;/// white win
break;
}
else if(s[i+k][j-k]!='.')
{
t_left=0;
}
}
}
else
break;
}
for(int k=1;;k++)
{
if(i+k<8)
{
if(t_right&&j+k<8)
{
if(s[i+k][j+k]=='k')
{
ctag=-1; /// white win
break;
}
else if(s[i+k][j+k]!='.')
{
t_right=0;
}
}
}
else
break;
}
// up
t_right=1,t_left=1;
for(int k=1;;k++)
{
if(i-k>=0)
{
if(t_left&&j-k>=0)
{
if(s[i-k][j-k]=='k')
{
ctag=-1;/// white win
break;
}
else if(s[i-k][j-k]!='.')
{
t_left=0;
}
}
}
else
break;
}
for(int k=1;;k++)
{
if(i-k>=0)
{
if(t_right&&j+k<8)
{
if(s[i-k][j+k]=='k')
{
ctag=-1; /// white win
break;
}
else if(s[i-k][j+k]!='.')
{
t_right=0;
}
}
}
else
break;
}
}
else if(s[i][j]=='R')
{
bool right=1,up=1,down=1,left=1;
for(int k=1;;k++)
{
if(right&&j+k<8)
{
if(s[i][j+k]=='k')
{
ctag=-1;
break;
}
else if(s[i][j+k]!='.')
{
right=0;
}
}
else
break;
}
for(int k=1;;k++)
{
if(left&&j-k>=0)
{
if(s[i][j-k]=='k')
{
ctag=-1;
break;
}
else if(s[i][j-k]!='.')
{
left=0;
}
}
else
break;
}
for(int k=1;;k++)
{
if(up&&i-k>=0)
{
if(s[i-k][j]=='k')
{
ctag=-1;
break;
}
else if(s[i-k][j]!='.')
{
up=0;
}
}
else
break;
}
for(int k=1;;k++)
{
if(down&&i+k<8)
{
if(s[i+k][j]=='k')
{
ctag=-1;
break;
}
else if(s[i+k][j]!='.')
{
down=0;
}
}
else
break;
}
}
else if(s[i][j]=='r')
{
bool right=1,up=1,down=1,left=1;
for(int k=1;;k++)
{
if(right&&j+k<8)
{
if(s[i][j+k]=='K')
{
ctag=1;
break;
}
else if(s[i][j+k]!='.')
{
right=0;
}
}
else
break;
}
for(int k=1;;k++)
{
if(left&&j-k>=0)
{
if(s[i][j-k]=='K')
{
ctag=1;
break;
}
else if(s[i][j-k]!='.')
{
left=0;
}
}
else
break;
}
for(int k=1;;k++)
{
if(up&&i-k>=0)
{
if(s[i-k][j]=='K')
{
ctag=1;
break;
}
else if(s[i-k][j]!='.')
{
up=0;
}
}
else
break;
}
for(int k=1;;k++)
{
if(down&&i+k<8)
{
if(s[i+k][j]=='K')
{
ctag=1;
break;
}
else if(s[i+k][j]!='.')
{
down=0;
}
}
else
break;
}
}
else if(s[i][j]=='p')
{
if(i+1<8)
{
if(j+1<8)
{
if(s[i+1][j+1]=='K')
{
ctag=1;
}
}
if(j-1>=0)
{
if(s[i+1][j-1]=='K')
{
ctag=1;
}
}
}
}
else if(s[i][j]=='P')
{
if(i-1>=0)
{
if(j+1<8)
{
if(s[i-1][j+1]=='k')
{
ctag=-1;
}
}
if(j-1>=0)
{
if(s[i-1][j-1]=='k')
{
ctag=-1;
}
}
}
}
else if(s[i][j]=='k')
{
for(int c=0;c<8;c++)
{
int xx=i+dir[c][0];
int yy=j+dir[c][1];
if(xx>=0&&xx<8&&yy>=0&&yy<8)
{
if(s[xx][yy]=='K')
{
ctag=1;
}
}
}
}
else if(s[i][j]=='K')
{
for(int c=0;c<8;c++)
{
int xx=i+dir[c][0];
int yy=j+dir[c][0];
if(xx>=0&&xx<8&&yy>=0&&yy<8)
{
if(s[xx][yy]=='k')
{
ctag=-1;
}
}
}
}
else if(s[i][j]=='N')
{
for(int c=0;c<8;c++)
{
int xx=i+move[c][0];
int yy=j+move[c][1];
if(xx>=0&&xx<8&&yy>=0&&yy<8)
{
if(s[xx][yy]=='k')
{
ctag=-1;
}
}
}
}
else if(s[i][j]=='n')
{
for(int c=0;c<8;c++)
{
int xx=i+move[c][0];
int yy=j+move[c][1];
if(xx>=0&&xx<8&&yy>=0&&yy<8)
{
if(s[xx][yy]=='K')
{
ctag=1;
}
}
}
}
else if(s[i][j]=='q')
{
for(int c=0;c<8;c++)
{
for(int k=1;;k++)
{
int xx=i+dir[c][0]*k;
int yy=j+dir[c][1]*k;
if(xx>=0&&xx<8&&yy>=0&&yy<8)
{
if(s[xx][yy]=='K')
{
ctag=1;
break;
}
else if(s[xx][yy]!='.')
break;
}
else
break;
}
}
}
else if(s[i][j]=='Q')
{
for(int c=0;c<8;c++)
{
for(int k=1;;k++)
{
int xx=i+dir[c][0]*k;
int yy=j+dir[c][1]*k;
if(xx>=0&&xx<8&&yy>=0&&yy<8)
{
if(s[xx][yy]=='k')
{
ctag=-1;
break;
}
else if(s[xx][yy]!='.')
break;
}
else
break;
}
}
}
//printf("%c",s[i][j]);
} printf("Game #%d: ",++cas);
if(ctag==-1)
printf("black king is in check.\n");
else if(ctag==1)
printf("white king is in check.\n");
else
printf("no king is in check.\n");
getchar();
}
return 0;
}

uva 10196 Check The Check的更多相关文章

  1. 烟大 Contest1024 - 《挑战编程》第一章:入门 Problem G: Check The Check(模拟国际象棋)

    Problem G: Check The Check Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 10  Solved: 3[Submit][Statu ...

  2. UVA - 10196:Check The Check

    类型:简单模拟 大致题意:已知国际象棋行棋规则,给你一个局面,问是否将军?谁将谁的军?(保证不会同时将军) 思路:都以小写字母 测试 是否将 大写字母. 然后一个局面测两次(一次直接测,一次反转棋盘, ...

  3. UVA 10196 Morning Walk(欧拉回路)

    Problem H Morning Walk Time Limit 3 Seconds Kamalis a Motashotaguy. He has got a new job in Chittago ...

  4. SQL PRIMARY KEY 约束\SQL FOREIGN KEY 约束\SQL CHECK 约束

    SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主 ...

  5. check约束条件

    --约束:对列的值起一个约束性的作用,规定列的值的范围 --主键.外键.非空.自增长标识列.唯一列(unique).check约束 --check 约束 --在某个表里点击右键→设计→进去找到要约束的 ...

  6. Health Check in eShop -- 解析微软微服务架构Demo(五)

    引言 What is the Health Check Health Check(健康状态检查)不仅是对自己应用程序内部检测各个项目之间的健康状态(各项目的运行情况.项目之间的连接情况等),还包括了应 ...

  7. SQLServer之修改CHECK约束

    使用SSMS数据库管理工具修改CHECK约束 1.打开数据库,选择数据表->右键点击->选择设计(或者展开约束,选择约束,右键点击,选择修改,后面步骤相同). 2.选择要修改的数据列-&g ...

  8. SQL CHECK 约束

    SQL CHECK 约束 CHECK 约束用于限制列中的值的范围. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值. 如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限 ...

  9. 约束4:唯一约束,Check约束和null

    大家知道,关系型数据库的逻辑运算的结果是三值型的,TRUE,FALSE和UNKNOWN,特别是,NULL值和任何值都不相等,任何值和NULL的比较,返回的逻辑结果都是unknown.而NULL值在唯一 ...

随机推荐

  1. 软件顾问可视设计的得力助手——PowerMockup

    你可能是一位从事信息化的软件顾问,你也可能是一位软件设计师,你须要通过图形直观的向客户表达你的设计意图. 你可能已经积累了非常多的Powerpoint图形元素,但每次都要从以往的文件里到处寻找,浪费您 ...

  2. BZOJ 2789: [Poi2012]Letters( BIT )

    直接求逆序对就行了...时间复杂度O(nlogn) ------------------------------------------------------------------------- ...

  3. 解决打包时IsCmdBld.exe出错的问题

    1.查看环境变量是否配置了 2.查看是否是使用administrator登陆的,要求使用administrator登陆否则可能会出现权限不足的现象

  4. IOS常用设计模式之委托模式

    对于iOS开发,举例Cocoa框架下的几个设计模式为大家分析.当然,Cocoa框架下关于设计模式的内容远远不止这些,我们选择了常用的几种:单例模式.委托模式.观察者模式.MVC模式. 委托模式 委托模 ...

  5. WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于HTTP-GET的实现](提供模拟程序)

    原文:WCF技术剖析之二十七: 如何将一个服务发布成WSDL[基于HTTP-GET的实现](提供模拟程序) 基于HTTP-GET的元数据发布方式与基于WS-MEX原理类似,但是ServiceMetad ...

  6. ESRI Shapefiles (SHP)

    ESRI Shapefiles (SHP) Also known as ESRI ArcView Shapefiles or ESRI Shapefiles. ESRI is the company ...

  7. 当JAVA集合移除自身集合元素时发生的诸多问题

    一段代码目的是想删除集合中包括"a"字符串的集合项: public class TestForeach { public static void main(String[] arg ...

  8. 遗传算法Matlab源程序

    参考自: http://blog.163.com/zhaoshuyu_thomas/blog/static/461929072009103034816716/ 大家内容上可以参考上述文章,但其代码有很 ...

  9. iOS - 单例传值 (一)

    点击打开链接    iOS - 单例传值 (二) 单例只会对某个类实例化一次/单例类,对单例这个类实例化一次有且仅有一个对象 你单例初始化,只能初始化一次,然后你指向的对象,其实都是指向一个内存地址, ...

  10. 重操JS旧业第七弹:面向对象与对象创建

    JS是一种完全面向对象的程序设计语言,在面向对象处理方面,具有多种多样的实现方式,加之对象成员的动态性使得这门语言更加灵活:而js对象成员动态性也是创建和扩展对象的有力方式. 1 对象成员动态性 属性 ...