题目地址:http://poj.org/problem?id=2996

 /*
题意:给出白方和黑方的棋子和对应的坐标,输出该副棋盘的样子
模拟题 + 结构体排序:无算法,switch区分读入的字符,按照黑白的排序规则排序,再输出
注意:(转载)1,棋盘中大写字母表示的是白方棋子,小写是黑方。
2,注意棋盘的行数是从最下面开始计数的。和数组的下标相反。也就是说数组行数为8的棋盘行 数为1(数组从1开始)。
3,最容易忽略也最重要的是:白旗和黑棋在输出的时候其实排序规则是不一样的(但是棋子的类型都要按照KQRBNP顺序)。
主要是行列的优先问题:
白棋先按行数(棋盘的行编号)升序排,然后按照列升序排。解决办法:按行升序扫描输出。
黑棋先按行数(棋盘的编号)降序排,然后按照列升序排。解决办法:按行降序扫描输出。
输出的时候主要是要注意一下循环扫描的顺序就行了。
详细解释:http://poj.org/showmessage?message_id=346814
*/
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <string>
#include <map>
#include <queue>
#include <vector>
using namespace std; const int MAXN = 1e6 + ;
const int INF = 0x3f3f3f3f;
struct NODEb
{
char ch, col;
int pow, row;
}nodeb[];
struct NODEw
{
char ch, col;
int pow, row;
}nodew[];
int a[][];
string s[];
string ss[]; bool cmpw(NODEw x, NODEw y)
{
if (x.pow == y.pow)
{
if (x.row == y.row) return x.col < y.col;
else return x.row < y.row;
}
return x.pow < y.pow;
} bool cmpb(NODEb x, NODEb y)
{
if (x.pow == y.pow)
{
if (x.row == y.row) return x.col < y.col;
else return x.row > y.row;
}
return x.pow < y.pow;
} void work(void)
{
for (int i=; i<=; ++i)
{
int k = ;
for (int j=; j<; j+=)
{
++k;
switch (s[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;
}
}
}
int tb = , tw = ;
for (int i=; i<=; ++i)
{
for (int j=; j<=; ++j)
{
if (a[i][j] > )
{
nodew[++tw].pow = a[i][j];
nodew[tw].row = - i; nodew[tw].col = 'a' + j - ;
switch (a[i][j])
{
case : nodew[tw].ch = 'K'; break;
case : nodew[tw].ch = 'Q'; break;
case : nodew[tw].ch = 'R'; break;
case : nodew[tw].ch = 'B'; break;
case : nodew[tw].ch = 'N'; break;
default: break;
}
}
if (a[i][j] < )
{
nodeb[++tb].pow = -a[i][j];
nodeb[tb].row = - i; nodeb[tb].col = 'a' + j - ;
switch (a[i][j])
{
case -: nodeb[tb].ch = 'K'; break;
case -: nodeb[tb].ch = 'Q'; break;
case -: nodeb[tb].ch = 'R'; break;
case -: nodeb[tb].ch = 'B'; break;
case -: nodeb[tb].ch = 'N'; break;
default: break;
}
}
}
} sort (nodew+, nodew++tw, cmpw);
sort (nodeb+, nodeb++tb, cmpb); cout << "White: ";
for (int i=; i<=tw; ++i)
{
if (nodew[i].pow != )
cout << nodew[i].ch;
cout << nodew[i].col << nodew[i].row;
if (i != tw) cout << ',';
}
cout << endl;
cout << "Black: ";
for (int i=; i<=tb; ++i)
{
if (nodeb[i].pow != )
cout << nodeb[i].ch;
cout << nodeb[i].col << nodeb[i].row;
if (i != tb) cout << ',';
}
cout << endl;
} int main(void) //POJ 2996 Help Me with the Game
{
freopen ("I.in", "r", stdin); for (int i=; i<=; ++i)
{
cin >> ss[i]; cin >> s[i];
}
cin >> ss[]; work (); return ;
} /*
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
*/

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

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

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

  2. POJ 2996 &amp; 2993 国际象棋布局 模拟

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

  3. 快速切题 poj 2996 Help Me with the Game 棋盘 模拟 暴力 难度:0

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

  4. Poj 2996 Help Me with the Game

    1.Link: http://poj.org/problem?id=2996 2.Content: Help Me with the Game Time Limit: 1000MS   Memory ...

  5. 模拟 POJ 2993 Emag eht htiw Em Pleh

    题目地址:http://poj.org/problem?id=2993 /* 题意:与POJ2996完全相反 模拟题 + 字符串处理:无算法,读入两行字符串找出相应点用used标记,输出时标记过的输出 ...

  6. 模拟 POJ 1573 Robot Motion

    题目地址:http://poj.org/problem?id=1573 /* 题意:给定地图和起始位置,robot(上下左右)一步一步去走,问走出地图的步数 如果是死循环,输出走进死循环之前的步数和死 ...

  7. 模拟 POJ 2632 Crashing Robots

    题目地址:http://poj.org/problem?id=2632 /* 题意:几个机器人按照指示,逐个朝某个(指定)方向的直走,如果走过的路上有机器人则输出谁撞到:如果走出界了,输出谁出界 如果 ...

  8. 模拟 POJ 1068 Parencodings

    题目地址:http://poj.org/problem?id=1068 /* 题意:给出每个右括号前的左括号总数(P序列),输出每对括号里的(包括自身)右括号总数(W序列) 模拟题:无算法,s数组把左 ...

  9. stack(数组模拟) POJ 2559 Largest Rectangle in a Histogram

    题目传送门 /* 题意:宽度为1,高度不等,求最大矩形面积 stack(数组模拟):对于每个a[i]有L[i],R[i]坐标位置 表示a[L[i]] < a[i] < a[R[i]] 的极 ...

随机推荐

  1. zstu.4019.排队购票(多维dp)

    排队购票 Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 1264  Solved: 808 Description 一常球赛开始前,售票工作正在进行中. ...

  2. Unity游戏开发之“屏幕截图”

    原地址:http://sygame.lofter.com/post/117105_791680 在unity游戏开发中,可能会遇到在游戏中截屏的效果.这儿提供两种截屏方法.(方法二提供显示截图缩略图代 ...

  3. ios流媒体

    http://my.oschina.net/CgShare/blog/302303 渐进式下载(伪流媒体) 介于下载本地播放与实时流媒体之间的一种播放形式,下载本地播放必须全部将文件下载完成后才能播放 ...

  4. Aptana插件安装到eclipse和myeclipse的详细过程

    刚开始学习Jquery,为了搭建好的环境是很重要的,所以我尝试了很多方式,下面之一. 一.要下载好Aptana 插件 官网: http://update1.aptana.org/studio/3.2/ ...

  5. PHP 的__call()

    PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法.如果你试着调用一个对象中不存在或被权限控制中的方法,__call 方法将会被自动调用. 例七:__call ...

  6. 如何使用setup.py文件

    setup.py文件的使用:% python setup.py build #编译% python setup.py install    #安装% python setup.py sdist     ...

  7. Jump Game | & ||

    Jump Game | Given an array of non-negative integers, you are initially positioned at the first index ...

  8. sqlserver 中的NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX

    1.NOLOCK(不加锁) 此选项被选中时,SQL Server 在读取或修改数据时不加任何锁. 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回滚(Rol ...

  9. 卸载Windows服务

    在Windows中,有一类程序称为服务,在操作系统内核加载完成后就开始加载.这里程序往往运行在操作系统的底层,因此资源占用比较大.执行效率比较 高,比较有代表性的就是杀毒软件. 但是一旦因为特殊原因不 ...

  10. Java性能优化权威指南-读书笔记(三)-JVM性能调优-内存占用

    新生代.老年代.永久代的概念不多说,这三个空间中任何一个不能满足内存分配请求时,就会发生垃圾收集. 新生代不满足内存分配请求时,发生Minor GC,老年代.永久代不满足内存分配请求时,发生Full ...