uva 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的更多相关文章
- 烟大 Contest1024 - 《挑战编程》第一章:入门 Problem G: Check The Check(模拟国际象棋)
Problem G: Check The Check Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 10 Solved: 3[Submit][Statu ...
- UVA - 10196:Check The Check
类型:简单模拟 大致题意:已知国际象棋行棋规则,给你一个局面,问是否将军?谁将谁的军?(保证不会同时将军) 思路:都以小写字母 测试 是否将 大写字母. 然后一个局面测两次(一次直接测,一次反转棋盘, ...
- UVA 10196 Morning Walk(欧拉回路)
Problem H Morning Walk Time Limit 3 Seconds Kamalis a Motashotaguy. He has got a new job in Chittago ...
- SQL PRIMARY KEY 约束\SQL FOREIGN KEY 约束\SQL CHECK 约束
SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主 ...
- check约束条件
--约束:对列的值起一个约束性的作用,规定列的值的范围 --主键.外键.非空.自增长标识列.唯一列(unique).check约束 --check 约束 --在某个表里点击右键→设计→进去找到要约束的 ...
- Health Check in eShop -- 解析微软微服务架构Demo(五)
引言 What is the Health Check Health Check(健康状态检查)不仅是对自己应用程序内部检测各个项目之间的健康状态(各项目的运行情况.项目之间的连接情况等),还包括了应 ...
- SQLServer之修改CHECK约束
使用SSMS数据库管理工具修改CHECK约束 1.打开数据库,选择数据表->右键点击->选择设计(或者展开约束,选择约束,右键点击,选择修改,后面步骤相同). 2.选择要修改的数据列-&g ...
- SQL CHECK 约束
SQL CHECK 约束 CHECK 约束用于限制列中的值的范围. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值. 如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限 ...
- 约束4:唯一约束,Check约束和null
大家知道,关系型数据库的逻辑运算的结果是三值型的,TRUE,FALSE和UNKNOWN,特别是,NULL值和任何值都不相等,任何值和NULL的比较,返回的逻辑结果都是unknown.而NULL值在唯一 ...
随机推荐
- Linux 下IOport编程訪问
曾经写的一篇笔记.偶尔翻出来了,放在这里做个纪念 Linux 下IOport编程訪问 这里记录的方法是在用户态訪问IOport,不涉及驱动程序的编写. 首先要包括头文件 /usr/include/as ...
- ArrayList集合-[长度问题]--C#
list.Count//获取集合中实际元素的个数.list.Capacity//获取集合中可包含的元素数. /** * 每次集合中实际包含元素的个数(Count)超过了可以包含的元素的个数(Cap ...
- cocos2d-x游戏开发系列教程-坦克大战游戏之敌方坦克AI的编写
在上篇我们完成了子弹和地图碰撞的检测,在这篇我们将完成敌方坦克AI的编写. 具体思路是屏幕中保持有四个敌方坦克,然后坦克随机方向运动,并且子弹消失后1秒发射一次 1.我们新建一个敌方坦克的AI类来控制 ...
- grunt 前端开发环境搭建
1.找管理员开通gitlab权限 2.下载并安装git工具 3.下载并安装nodejs 4.安装cnpm 5.安装kulor-cli cnpm install -g kulor-cli cnpm in ...
- mpi中利用自定义归约操作实现merge
在归并排序中,很重要的一步是将两个排序数组合并成一个数组,这个操作叫merge.merge操作可以用来解决某些Top K问题. 问题描述 在哼唱搜索中,用户通过哼唱一个音乐片段去搜索与其相似的音乐.后 ...
- 开发板和centos服务器tftp传文件
CentOS下使用TFTP向目标板传送文件http://www.linuxidc.com/Linux/2010-10/29218.htm 1.安装相关软件包 为了使主机支持TFTP,必须确保TFTP后 ...
- android自定义控件---添加表情
android自定义控件---添加表情 一.定义layout文件,图片不提供了 <?xml version="1.0" encoding="utf-8"? ...
- WCF技术剖析之十一:异步操作在WCF中的应用(上篇)
原文:WCF技术剖析之十一:异步操作在WCF中的应用(上篇) 按照操作执行所需的资源类型,我们可以将操作分为CPU绑定型(CPU Bound)操作和I/O绑定型(I/O Bound)操作.对于前者,操 ...
- 基于visual Studio2013解决面试题之0907大数乘法
题目
- 《C陷阱与缺陷》整理二
1.数组名作实參 在C语言中,我们没有办法将一个数组作为函数參数传递,假设我们使用数组名作为參数.这个时候数组名立马会被转换为指向该数组的第一个元素的指针. 关于这一点的理解能够向前深 ...