Help Me with the Game
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 3630   Accepted: 2319

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

Source

 
 #include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<math.h>
#include<algorithm>
using namespace std;
char st[] , chess[][] ;
int a[][] ; struct white
{
char ch , row , col;
int pow ;
}wh[]; struct black
{
char ch , row , col ;
int pow ;
}bl[]; bool cmp2 (white a , white b)
{
if (a.pow < b.pow)
return ;
if (a.pow > b.pow)
return ;
if (a.pow == b.pow ) {
if (a.row == b.row)
return a.col < b.col ;
else
return a.row < b.row ;
}
} bool cmp1 (black a , black b)
{
if (a.pow < b.pow)
return ;
if (a.pow > b.pow)
return ;
if (a.pow == b.pow ) {
if (a.row == b.row)
return a.col < b.col ;
else
return a.row > b.row ;
}
} int main ()
{
// freopen ("a.txt" , "r" , stdin) ;
for (int i = ; i <= ; i++) {
if (i & )
gets (st) ;
else
gets (chess[i / ]) ;
}
int k , f; for (int i = ; i <= ; i++) {
k = ;
for (int j = ; j < ; j += , k++) {
switch ( chess[i][j] )
{
case 'k' : a[i][k] = ; break ;
case 'q' : a[i][k] = ; break ;
case 'r' : a[i][k] = ; break ;
case 'b' : a[i][k] = ; break ;
case 'n' : a[i][k] = ; break ;
case 'p' : a[i][k] = ; break ;
case 'K' : a[i][k] = - ; break ;
case 'Q' : a[i][k] = - ; break ;
case 'R' : a[i][k] = - ; break ;
case 'B' : a[i][k] = - ; break ;
case 'N' : a[i][k] = - ; break ;
case 'P' : a[i][k] = - ; break ;
case ':' : a[i][k] = ; break ;
case '.' : a[i][k] = ; break ;
default : break ;
}
}
}
/* for (int i = 1 ; i <= 8 ; i++) {
for (int j = 1 ; j <= 8 ; j++) {
printf ("%d\t" , a[i][j]) ;
}
puts ("") ;
}*/
k = , f = ;
for (int i = ; i <= ; i++) {
for (int j = ; j <= ; j++) {
if (a[i][j] > ) {
bl[k].pow = a[i][j] ;
bl[k].row = '' + - i ;
bl[k].col = 'a' + j - ;
switch (a[i][j])
{
case : bl[k].ch = 'K' ; break ;
case : bl[k].ch = 'Q' ; break ;
case : bl[k].ch = 'R' ; break ;
case : bl[k].ch = 'B' ; break ;
case : bl[k].ch = 'N' ; break ;
default : break ;
}
k++ ;
}
if (a[i][j] < ) {
wh[f].pow = -a[i][j] ;
wh[f].row = '' + - i ;
wh[f].col = 'a' + j - ;
switch (-a[i][j])
{
case : wh[f].ch = 'K' ; break ;
case : wh[f].ch = 'Q' ; break ;
case : wh[f].ch = 'R' ; break ;
case : wh[f].ch = 'B' ; break ;
case : wh[f].ch = 'N' ; break ;
default : break ;
}
f++ ;
}
}
} sort (bl , bl + k , cmp1) ;
sort (wh , wh + f , cmp2) ; printf ("White: ") ;
for (int i = ; i < f ; i++) {
// printf ("wh[%d].pow = %d\n" , i , wh[i].pow) ;
if (wh[i].pow != )
printf ("%c" , wh[i].ch) ;
printf ("%c%c" , wh[i].col , wh[i].row ) ;
if (i != f - )
printf (",") ;
}
puts ("") ; printf ("Black: ") ;
for (int i = ; i < k ; i++) {
if (bl[i].pow != )
printf ("%c" , bl[i].ch) ;
printf ("%c%c" , bl[i].col , bl[i].row ) ;
if (i != k - )
printf (",") ;
}
puts ("") ;
return ;
}

Help Me with the Game(imitate)的更多相关文章

  1. Emag eht htiw Em Pleh(imitate)

    Emag eht htiw Em Pleh Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 2901   Accepted:  ...

  2. Robot Motion(imitate)

    Robot Motion Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 11065   Accepted: 5378 Des ...

  3. Crashing Robots(imitate)

    Crashing Robots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8124   Accepted: 3528 D ...

  4. Parencodings(imitate)

    Parencodings Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20679   Accepted: 12436 De ...

  5. [JavaScript] Imitate String.Format() in c#

    Definition if (!String.prototype.format) { String.prototype.format = function () { var args = argume ...

  6. Basic Tutorials of Redis(8) -Transaction

    Data play an important part in our project,how can we ensure correctness of the data and prevent the ...

  7. 第一届山东省ACM——Balloons(java)

    Description Both Saya and Kudo like balloons. One day, they heard that in the central park, there wi ...

  8. Essential controls for web app

    AUTO-COMPLETE/AUTO-SUGGEST Auto-complete using Vaadin Offer auto-suggest or auto-complete to help yo ...

  9. sqlmap用户手册 | WooYun知识库

    sqlmap用户手册 说明:本文为转载,对原文中一些明显的拼写错误进行修正,并标注对自己有用的信息. 原文:http://drops.wooyun.org/tips/143  ============ ...

随机推荐

  1. 常用的user32API说明

    整理了一下常用的user32API说明 还有软件Microsoft Spy++供大家下载  Spyv10.00.30319.rar using System; using System.Collect ...

  2. threejs构建web三维视图入门教程

    本文是一篇简单的webGL+threejs构建web三维视图的入门教程,你可以了解到利用threejs创建简单的三维图形,并且控制图形运动.若有不足,欢迎指出. 本文使用的框架是three.js gi ...

  3. webSocket实现web及时聊天的例子

    概述 websocket目前虽然无法普及应用,未来是什么样子,我们不得而知,但现在开始学习应用它,只有好处没有坏处,本随笔的WebSocket是版本13(RFC6455)协议的实现,也是目前webso ...

  4. 原生js dom记忆的内容

    1.DOM基础getElementByIdgetElementByTagNamegetElementByName getElementsByClass querySelector querySelec ...

  5. [转]Oracle中的索引详解

    原文地址:http://www.oschina.net/question/30362_4057 一. ROWID的概念 存储了row在数据文件中的具体位置:64位 编码的数据,A-Z, a-z, 0- ...

  6. [转]Java中的对象和对象引用实例浅析

    在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起了解一下对象和对象引用之间的区别 ...

  7. 【BZOJ 3188】【Coci 2011】Upit Splay模板题

    转啊转终于转出来了,然而我的模板跟陈竞潇学长的模板一模一样,还是太弱啊,第一次用指针. #include<cstdio> #include<cstring> #include& ...

  8. VS2013打开项目提示此版本的应用程序不支持其项目类型(.csproj)

    命令行或者Vs自带的命令提示符输入: devenv.exe /resetskippkgs 重新打开项目即可.

  9. Android系统中的广播(Broadcast)机制简要介绍和学习计划

    在Android系统中,广播(Broadcast)是在组件之间传播数据(Intent)的一种机制:这些组件甚至是可以位于不同的进程中,这样它就像Binder机制一样,起到进程间通信的作用:本文通过一个 ...

  10. POJ 3273 Monthly Expense

    传送门 Time Limit: 2000MS Memory Limit: 65536K Description Farmer John is an astounding accounting wiza ...