题目: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. pop,墨刀,快现、justinmind 、Axure

    原型设计软件 墨刀:https://modao.cc Justinmind: http://www.zhihu.com/question/26662368/answer/33586218 http:/ ...

  2. 快捷键accesskey

    <!DOCTYPE html> <html> <body> <a href="http://www.w3school.com.cn/html/&qu ...

  3. 02-OC方法、属性

    目录: 一.方法 二.实例变量 三.属性(点语法) 四.初始化方法(自定义构造方法) 回到顶部 一.方法 1 函数与方法有什么区别? 函数只是一个程序的代码段,与类无关. 方法,类的一部分,代表对象可 ...

  4. m2eclipse简单使用,创建Maven项目 ,运行mvn命令(转)

    前面介绍了如何安装m2eclipse,现在,我们使用m2ecilpse导入Hello World项目. 选择菜单项File,然后选择Import,我们会看到一个Import对话框,在该对话框中选择Ge ...

  5. 开源OCR光学字符识别

    纸张在 许多地方已日益失宠,无纸化办公谈论40多年,办公环境正限制纸山的生成.而过去几年,无纸化办公的概念发生了显着的转变.在计算机软件的帮助 下,包含大量重要管理数据和资讯的文档可以更方便的以电子形 ...

  6. cocos2d-x游戏开发系列教程-中国象棋00-前言

    象棋描述 在说代码之前,我们先让象棋效果登场,以方便大家对代码的理解 欢迎界面 中国象棋程序,运行起来的第一个界面是一个欢迎界面,该欢迎界面在停留一秒后进入游戏界面 游戏主界面 新局:所有棋子归位,状 ...

  7. VMware Player 使用错误集锦

    1.执行VMware Player 弹出"开机时出错:内部错误"的提示.虚拟机执行不了,例如以下图: 解决的方法: 以管理员身份执行.         可能如今登录windows的 ...

  8. Python 3语法小记(四)字典 dictionary

    字典是Python里面一种无序存储结构,存储的是键值对 key - value.关键字应该为不可变类型,如字符串.整数.包含不可变对象的元组. 字典的创建很简单,用 d = {key1 : value ...

  9. 搭建Windows SVN服务器及TortoiseSVN使用帮助和下载

    搭建Windows SVN服务器: 用的SVN服务器通常为外部,例如Google Code的服务器,不过,做为一个程序开发人员,就算自己一个人写程序,也应该有一个SVN版本控制系统,以便对开发代码进行 ...

  10. [poj 1904]King's Quest[Tarjan强连通分量]

    题意:(当时没看懂...) N个王子和N个女孩, 每个王子喜欢若干女孩. 给出每个王子喜欢的女孩编号, 再给出一种王子和女孩的完美匹配. 求每个王子分别可以和那些女孩结婚可以满足最终每个王子都能找到一 ...