寒假的ACM训练三(PC110107/UVa10196)
#include <iostream>
#include <string.h> using namespace std;
char qp[10][10];
int result; //结果
int black_k_x; //将军的x,y
int black_k_y;
int white_k_x;
int white_k_y;
int abs(int i){
if(i<0)
return -i;
return i;
}
//马
bool n_check(int n_x,int n_y,int k_x,int k_y){ if(abs(n_x-k_x)==2&&abs(n_y-k_y)==1)
return true;
if(abs(n_x-k_x)==1&&abs(n_y-k_y)==2)
return true; return false; }
//兵
bool p_check(int p_x,int p_y,int k_x,int k_y){
if(qp[p_x][p_y]=='p'){
if(p_x+1==k_x&&abs(p_y-k_y)==1)
return true;
}
else if(qp[p_x][p_y]=='P'){
if(p_x-1==k_x&&abs(p_y-k_y)==1)
return true;
}
return false; }
//车
bool r_check(int r_x,int r_y,int k_x,int k_y){
int i;
if(r_x==k_x){ //同横
if(k_y>r_y){ //r_y 比较小
for(i=r_y+1;i<k_y;i++)
if(qp[r_x][i]!='.')
break;
if(i==k_y)
return true;
}
if(k_y<r_y){ for(i=k_y+1;i<r_y;i++)
if(qp[r_x][i]!='.')
break; if(i==r_y)
return true; } }
if(r_y==k_y){ //同列
if(k_x>r_x){ //r_x比较小
for(i=r_x+1;i<k_x;i++)
if(qp[i][k_y]!='.')
break;
if(i==k_x)
return true;
}
if(k_x<r_x){ //k_x 比较小 for(i=k_x+1;i<r_x;i++)
if(qp[i][k_y]!='.')
break; if(i==r_x)
return true;
} }
return false; }
//象
bool b_check(int b_x,int b_y,int k_x,int k_y){
int i,j;
//x差和y差相同
if(abs(b_x-k_x)==abs(b_y-k_y)){ //xy同增
i=b_x;j=b_y;
while(i<k_x&&j<k_y){
i++;j++;
if(qp[i][j]!='.')
break;
} //x减y增
while(i>k_x&&j<k_y){ i--;j++;
if(qp[i][j]!='.')
break;
} //x增y减
while(i<k_x&&j>k_y){ i++;j--;
if(qp[i][j]!='.')
break;
} //x减y减
while(i>k_x&&j>k_y){
i--;j--;
if(qp[i][j]!='.')
break;
} if(i==k_x&&j==k_y)
return true; }
return false; }
//后
bool q_check(int q_x,int q_y,int k_x,int k_y){
return r_check(q_x,q_y,k_x,k_y)||b_check(q_x,q_y,k_x,k_y); }
void check(){ bool f;
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++){ if(qp[i][j]=='p'){
f=(p_check(i,j,white_k_x,white_k_y)); }else if(qp[i][j]=='n'){
f=(n_check(i,j,white_k_x,white_k_y)); } else if(qp[i][j]=='q'){
f=(q_check(i,j,white_k_x,white_k_y)); }else if(qp[i][j]=='r'){
f=(r_check(i,j,white_k_x,white_k_y)); }else if(qp[i][j]=='b'){
f=(b_check(i,j,white_k_x,white_k_y)); } if(f==true){ result=1;
return;
} if(qp[i][j]=='P'){
f=(p_check(i,j,black_k_x,black_k_y)); }else if(qp[i][j]=='N'){
f=(n_check(i,j,black_k_x,black_k_y)); }else if(qp[i][j]=='Q'){
f=(q_check(i,j,black_k_x,black_k_y)); }else if(qp[i][j]=='R'){
f=(r_check(i,j,black_k_x,black_k_y)); }else if(qp[i][j]=='B'){
f=(b_check(i,j,black_k_x,black_k_y));
}
if(f==true){ result=0;
return;
} }
result=2; } int main()
{
int run=1; while(true){
bool flag=true; //退出标志 memset(qp,'.',sizeof(qp));
for(int i=1;i<=8;i++)
for(int j=1;j<=8;j++){
cin>>qp[i][j];
if(flag&&qp[i][j]!='.')
flag=false;
if(qp[i][j]=='k'){black_k_x=i;black_k_y=j;}
if(qp[i][j]=='K'){white_k_x=i;white_k_y=j;} }
if(flag) break; //空盘退出 check(); //读盘 if(result==0) //结果为0
cout << "Game #"<<run<<": black king is in check." << endl;
else if(result==1)
cout << "Game #"<<run<<": white king is in check." <<endl;
else
cout << "Game #"<<run<<": no king is in check."<<endl; run++; }
return 0;
}
寒假的ACM训练三(PC110107/UVa10196)的更多相关文章
- 寒假的ACM训练(一)
今天开始ACM训练,选择了刘汝佳的<挑战编程>,暂时算是开始了. 测评的网址: http://www.programming-challenges.com 第一个题目是水题啦.3n+1. ...
- 2014暑假ACM训练总结
2014暑假ACM训练总结报告 匆匆之中,一个暑假又过去了,在学校训练的这段日子真的是感觉日子过得好快啊! 时光如箭,日月如梭! 匆忙的学习之中一个暑假就这样结束了,现在就来写一些总结吧,供自己以后阅 ...
- 计蒜客 ACM训练联盟周赛 第一场 Christina式方格取数 思维
助手Christina发明了一种方格取数的新玩法:在n*m的方格棋盘里,每个格子里写一个数.两个人轮流给格子染色,直到所有格子都染了色.在所有格子染色完后,计算双方的分数.对于任意两个相邻(即有公共边 ...
- 计蒜客 ACM训练联盟周赛 第一场 从零开始的神棍之路 暴力dfs
题目描述 ggwdwsbs最近被Zeratul和Kyurem拉入了日本麻将的坑.现在,ggwdwsbs有13张牌,Kyurem又打了一张,加起来有14张牌.ggwdwsbs想拜托你帮他判断一下,这14 ...
- 计蒜客 ACM训练联盟周赛 第一场 Alice和Bob的Nim游戏 矩阵快速幂
题目描述 众所周知,Alice和Bob非常喜欢博弈,而且Alice永远是先手,Bob永远是后手. Alice和Bob面前有3堆石子,Alice和Bob每次轮流拿某堆石子中的若干个石子(不可以是0个), ...
- 孤荷凌寒自学python第三十九天python 的线程锁Lock
孤荷凌寒自学python第三十九天python的线程锁Lock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...
- 孤荷凌寒自学python第三十八天初识python的线程控制
孤荷凌寒自学python第三十八天初识python的线程控制 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.线程 在操作系统中存在着很多的可执行的应用程序,每个应用程序启动后,就可以看 ...
- 孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化
孤荷凌寒自学python第三十七天python的文件与内存变量之间的序列化与反序列化 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.什么是序列化与反序列化 序列化是指将内存中的数据进行指 ...
- 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容
孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...
随机推荐
- C#面向对象的三大特征
一,封装:我们可以把世界上任何一个东西都看作为一个对象,那么我们这里以人为例,一个人就肯定是一个对象了.那么封装是什么呢?封装就是这个人要完成一件事情,他所需要的任何工具都带在了自己的身上,所需要的技 ...
- HTML5 Canvas核心技术—图形、动画与游戏开发.pdf1
canvas元素可以说是HTML5元素中功能最强大的一个,它真正的能力是通过Canvas的context对象(绘图上下文)表现出来的 fillText()方法使用fillStyle属性来填充文本中的字 ...
- OpenCL memory object 之 传输优化
转载自:http://www.cnblogs.com/mikewolf2002/archive/2011/12/18/2291741.html 首先我们了解一些优化时候的术语及其定义: 1.defer ...
- ACM2037
这题采用的是贪心算法,暂不会.
- zoj 3819 Average Score
Average Score Time Limit: 2 Seconds Memory Limit: 65536 KB Bob is a freshman in Marjar Universi ...
- VirtualBox安装Ghost XP
http://jingyan.baidu.com/album/5d368d1e1a88b73f60c05721.html?picindex=1
- PAT 1004. Counting Leaves (30)
A family hierarchy is usually presented by a pedigree tree. Your job is to count those family membe ...
- 编码实战Web端联系人的增删改查
首先画出分析图 实现效果如图 项目下的包如图: 实体包 package com.contactSystem.entiey; public class Contact { private String ...
- java 加减乘除错误
有次做一个for循环(1000次左右),做的事情也是很简单的事情,就是 Double testValue = (long类型 / 8 ) * long类型 的一些加减乘除操作, 但是总是出现一些数 ...
- static inner class 什么时候被加载
一直认为在加载outer class 的同时也会加载inner class 并且完成静态变量和代码块的初始化,今天在维基百科上面看到 “The static class definitionLazyH ...