Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u

Submit Status

Description

Your task is to read a picture of a chessboard position and print it in the chess notation.

Input

The input consists of an ASCII-art picture of a chessboard with chess pieces on positions described by the input. The pieces of the white player are shown in upper-case letters, while the black player's pieces are lower-case letters. The letters are one of
"K" (King), "Q" (Queen), "R" (Rook), "B" (Bishop), "N" (Knight), or "P" (Pawn). The chessboard outline is made of plus ("+"), minus ("-"), and pipe ("|") characters. The black fields are filled with colons (":"), white fields with dots (".").

Output

The output consists of two lines. The first line consists of the string "White: ", followed by the description of positions of the pieces of the white player. The second line consists of the string "Black: ", followed by the description of positions of the
pieces of the black player. 



The description of the position of the pieces is a comma-separated list of terms describing the pieces of the appropriate player. The description of a piece consists of a single upper-case letter that denotes the type of the piece (except for pawns, for that
this identifier is omitted). This letter is immediatelly followed by the position of the piece in the standard chess notation -- a lower-case letter between "a" and "h" that determines the column ("a" is the leftmost column in the input) and a single digit
between 1 and 8 that determines the row (8 is the first row in the input). 



The pieces in the description must appear in the following order: King("K"), Queens ("Q"), Rooks ("R"), Bishops ("B"), Knights ("N"), and pawns. Note that the numbers of pieces may differ from the initial position because of capturing the pieces and the promotions
of pawns. In case two pieces of the same type appear in the input, the piece with the smaller row number must be described before the other one if the pieces are white, and the one with the larger row number must be described first if the pieces are black.
If two pieces of the same type appear in the same row, the one with the smaller column letter must appear first.

Sample Input

+---+---+---+---+---+---+---+---+
|.r.|:::|.b.|:q:|.k.|:::|.n.|:r:|
+---+---+---+---+---+---+---+---+
|:p:|.p.|:p:|.p.|:p:|.p.|:::|.p.|
+---+---+---+---+---+---+---+---+
|...|:::|.n.|:::|...|:::|...|:p:|
+---+---+---+---+---+---+---+---+
|:::|...|:::|...|:::|...|:::|...|
+---+---+---+---+---+---+---+---+
|...|:::|...|:::|.P.|:::|...|:::|
+---+---+---+---+---+---+---+---+
|:P:|...|:::|...|:::|...|:::|...|
+---+---+---+---+---+---+---+---+
|.P.|:::|.P.|:P:|...|:P:|.P.|:P:|
+---+---+---+---+---+---+---+---+
|:R:|.N.|:B:|.Q.|:K:|.B.|:::|.R.|
+---+---+---+---+---+---+---+---+

Sample Output

White: Ke1,Qd1,Ra1,Rh1,Bc1,Bf1,Nb1,a2,c2,d2,f2,g2,h2,a3,e4
Black: Ke8,Qd8,Ra8,Rh8,Bc8,Ng8,Nc6,a7,b7,c7,d7,e7,f7,h7,h6

给了一个固定大小的棋盘,要求输出黑白棋子的位置,本身题目不是很难,这种题目恶心在于要注意的地方很多:

1.白棋子是大写字母,黑棋子是小写字母。

2.棋盘的列是从左边开始是a一直到h,行驶从下面开始算1到上面的8。

3.白棋子输出是按照字母优先顺序,黑棋子输出是按照数字优先顺序。

4.本来到这里已经很恶心了,结果还有更奸诈的。。。那就是棋盘上的棋子数量是不固定的,不一定非得是这32个棋子,也是因为这个原因WA了一次。

代码:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#pragma warning(disable:4996)
using namespace std; char k_c[70],q_c[70],r_c[70],b_c[70],n_c[70],p_c[70],K_c[70],Q_c[70],R_c[70],B_c[70],N_c[70],P_c[70]; int k_y[70],q_y[70],r_y[70],b_y[70],n_y[70],p_y[70],K_y[70],Q_y[70],R_y[70],B_y[70],N_y[70],P_y[70]; string temp,test[20];
int i,j,flag;
int k_num,q_num,r_num,b_num,n_num,p_num,K_num,Q_num,R_num,B_num,N_num,P_num; int main()
{
//freopen("i.txt","r",stdin);
//freopen("o.txt","w",stdout); k_num=1;q_num=1;r_num=1;b_num=1;n_num=1;p_num=1;K_num=1;Q_num=1;R_num=1;B_num=1;N_num=1;P_num=1; cin>>temp;
for(i=1;i<=8;i++)
{
cin>>test[i];
cin>>temp; for(j=2;j<=30;j=j+4)
{
if(test[i][j]=='r')
{
r_c[r_num]='a'+(j/4);
r_y[r_num]=9-i;
r_num++;
}
else if(test[i][j]=='b')
{
b_c[b_num]='a'+(j/4);
b_y[b_num]=9-i;
b_num++;
}
else if(test[i][j]=='k')
{
k_c[k_num]='a'+(j/4);
k_y[k_num]=9-i;
k_num++;
}
else if(test[i][j]=='q')
{
q_c[q_num]='a'+(j/4);
q_y[q_num]=9-i;
q_num++;
}
else if(test[i][j]=='n')
{
n_c[n_num]='a'+(j/4);
n_y[n_num]=9-i;
n_num++;
}
else if(test[i][j]=='p')
{
p_c[p_num]='a'+(j/4);
p_y[p_num]=9-i;
p_num++;
}
}
}
for(i=8;i>=1;i--)
{
for(j=2;j<=30;j=j+4)
{
if(test[i][j]=='R')
{
R_c[R_num]='a'+(j/4);
R_y[R_num]=9-i;
R_num++;
}
else if(test[i][j]=='B')
{
B_c[B_num]='a'+(j/4);
B_y[B_num]=9-i;
B_num++;
}
else if(test[i][j]=='K')
{
K_c[K_num]='a'+(j/4);
K_y[K_num]=9-i;
K_num++;
}
else if(test[i][j]=='Q')
{
Q_c[Q_num]='a'+(j/4);
Q_y[Q_num]=9-i;
Q_num++;
}
else if(test[i][j]=='N')
{
N_c[N_num]='a'+(j/4);
N_y[N_num]=9-i;
N_num++;
}
else if(test[i][j]=='P')
{
P_c[P_num]='a'+(j/4);
P_y[P_num]=9-i;
P_num++;
}
}
} flag=1;
cout<<"White: ";
for(i=1;i<K_num;i++)
{
if(flag)
{
flag=0;
cout<<"K"<<K_c[i]<<K_y[i];
}
else
{
cout<<",K"<<K_c[i]<<K_y[i];
}
}
for(i=1;i<Q_num;i++)
{
if(flag)
{
flag=0;
cout<<"Q"<<Q_c[i]<<Q_y[i];
}
else
{
cout<<",Q"<<Q_c[i]<<Q_y[i];
}
}
for(i=1;i<R_num;i++)
{
if(flag)
{
flag=0;
cout<<"R"<<R_c[i]<<R_y[i];
}
else
{
cout<<",R"<<R_c[i]<<R_y[i];
}
}
for(i=1;i<B_num;i++)
{
if(flag)
{
flag=0;
cout<<"B"<<B_c[i]<<B_y[i];
}
else
{
cout<<",B"<<B_c[i]<<B_y[i];
}
}
for(i=1;i<N_num;i++)
{
if(flag)
{
flag=0;
cout<<"N"<<N_c[i]<<N_y[i];
}
else
{
cout<<",N"<<N_c[i]<<N_y[i];
}
}
for(i=1;i<P_num;i++)
{
if(flag)
{
flag=0;
cout<<P_c[i]<<P_y[i];
}
else
{
cout<<","<<P_c[i]<<P_y[i];
}
}
cout<<endl; flag=1;
cout<<"Black: ";
for(i=1;i<k_num;i++)
{
if(flag)
{
flag=0;
cout<<"K"<<k_c[i]<<k_y[i];
}
else
{
cout<<",K"<<k_c[i]<<k_y[i];
}
}
for(i=1;i<q_num;i++)
{
if(flag)
{
flag=0;
cout<<"Q"<<q_c[i]<<q_y[i];
}
else
{
cout<<",Q"<<q_c[i]<<q_y[i];
}
}
for(i=1;i<r_num;i++)
{
if(flag)
{
flag=0;
cout<<"R"<<r_c[i]<<r_y[i];
}
else
{
cout<<",R"<<r_c[i]<<r_y[i];
}
}
for(i=1;i<b_num;i++)
{
if(flag)
{
flag=0;
cout<<"B"<<b_c[i]<<b_y[i];
}
else
{
cout<<",B"<<b_c[i]<<b_y[i];
}
}
for(i=1;i<n_num;i++)
{
if(flag)
{
flag=0;
cout<<"N"<<n_c[i]<<n_y[i];
}
else
{
cout<<",N"<<n_c[i]<<n_y[i];
}
}
for(i=1;i<p_num;i++)
{
if(flag)
{
flag=0;
cout<<p_c[i]<<p_y[i];
}
else
{
cout<<","<<p_c[i]<<p_y[i];
}
}
cout<<endl; return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

POJ 2996:Help Me with the Game的更多相关文章

  1. 模拟 POJ 2996 Help Me with the Game

    题目地址:http://poj.org/problem?id=2996 /* 题意:给出白方和黑方的棋子和对应的坐标,输出该副棋盘的样子 模拟题 + 结构体排序:无算法,switch区分读入的字符,按 ...

  2. POJ 3321:Apple Tree + HDU 3887:Counting Offspring(DFS序+树状数组)

    http://poj.org/problem?id=3321 http://acm.hdu.edu.cn/showproblem.php?pid=3887 POJ 3321: 题意:给出一棵根节点为1 ...

  3. POJ 3252:Round Numbers

    POJ 3252:Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10099 Accepted: 36 ...

  4. poj 2996 Help Me with the Game(模拟)

    题目:http://poj.org/problem?id=2996 题意:给出 棋盘 情况 输出 白棋 和 黑棋在 棋盘上的 白棋为大写字母 黑棋为小写字母 棋盘 左下点为原点(1,a) 输出 是 按 ...

  5. POJ 1459:Power Network(最大流)

    http://poj.org/problem?id=1459 题意:有np个发电站,nc个消费者,m条边,边有容量限制,发电站有产能上限,消费者有需求上限问最大流量. 思路:S和发电站相连,边权是产能 ...

  6. POJ 3436:ACM Computer Factory(最大流记录路径)

    http://poj.org/problem?id=3436 题意:题意很难懂.给出P N.接下来N行代表N个机器,每一行有2*P+1个数字 第一个数代表容量,第2~P+1个数代表输入,第P+2到2* ...

  7. POJ 2195:Going Home(最小费用最大流)

    http://poj.org/problem?id=2195 题意:有一个地图里面有N个人和N个家,每走一格的花费是1,问让这N个人分别到这N个家的最小花费是多少. 思路:通过这个题目学了最小费用最大 ...

  8. POJ 3281:Dining(最大流)

    http://poj.org/problem?id=3281 题意:有n头牛,f种食物,d种饮料,每头牛有fnum种喜欢的食物,dnum种喜欢的饮料,每种食物如果给一头牛吃了,那么另一个牛就不能吃这种 ...

  9. POJ 3580:SuperMemo(Splay)

    http://poj.org/problem?id=3580 题意:有6种操作,其中有两种之前没做过,就是Revolve操作和Min操作.Revolve一开始想着一个一个删一个一个插,觉得太暴力了,后 ...

随机推荐

  1. springboot#配置https

    1.准备证书 2.1 springboot 1.x配置 2.2 springboot 2.x配置 1.准备证书: keytool -genkeypair -alias tomcat -keyalg R ...

  2. ch7对表单和数据表格使用样式

    对数据表格应用样式 1.表格特有的元素 caption:基本上用做表格的标题.summary:可应用于表格的标签,用来描述表格的内容(与image的alt文本相似) <table class=& ...

  3. android 根据res文件夹下(如res/raw)文件名获取其id

    android 根据res文件夹下(如res/raw)文件名获取其id //测试是否能够获取其资源ID int treeId = mv.getResources().getIdentifier(fil ...

  4. 安装oracle客户端后,怎样设置电脑的环境变量?

    安装配置参考: http://www.haodaima.net/art/2854001 设置环境变量(修改PATH和TNS_ADMIN环境变量): 对于NLS_LANG环境变量, 最好设置成和数据库端 ...

  5. CF 1198 A. MP3 模拟+滑动窗口

    A. MP3   题意:给你n个数,一个大小为8*I的容量,保存一个数需要多少容量取决于给定n个数的种类k,用公式 log2 k   计算,如果给定的容量不能保存所有数,选择减少数的种类来降低保存一个 ...

  6. 数据可视化-gojs插件使用技巧总结

    随着云计算时代的到来,由于Web技术的快速革新以及为了提供高质量的用户体验,数据可视化成为了前端技术发展的一大方向.为了解决这个问题,现如今涌现了很多优秀的第三方的javascript图形库,比如hi ...

  7. solus linux 更新源

    添加源(清华大学开源软件镜像)sudo eopkg ar Solus https://mirrors.tuna.tsinghua.edu.cn/solus/shannon/eopkg-index.xm ...

  8. Docker退出容器不关闭容器的方法

    进入docker容器后如果退出容器,容器就会变成Exited的状态,那么如何退出容器让容器不关闭呢? 如果要正常退出不关闭容器,请按Ctrl+P+Q进行退出容器,这一点很重要,请牢记! 以下示例为退出 ...

  9. CSU 1216 异或最大值

    求n个数里面,求两两异或的最大值 直接来肯定会超时 既然要异或最大值,那么两个数的二进制肯定是正好错开为好...为了能快速找到错开的数,确实有点难想到,用字典树,按二进制数插入,再一个一个在字典树里面 ...

  10. 在 Delphi 中使用微软全文翻译的小例子

    使用帮助 需要先去申请一个 AppID: http://www.bing.com/toolbox/bingdeveloper/使用帮助在: http://msdn.microsoft.com/en-u ...