题目链接:

https://vjudge.net/problem/POJ-2996

题目大意:

给出白方和黑方的棋子和对应的坐标,输出该副棋盘的样子

1,棋盘中大写字母表示的是白方棋子,小写是黑方。
2,注意棋盘的行数是从最下面开始计数的。和数组的下标相反。也就是说数组行数为8的棋盘行   数为1(数组从1开始)。一开始就写错了
3,最容易忽略也最重要的是:白棋和黑棋在输出的时候其实排序规则是不一样的,白棋先是行号从小到大,同一行列号从小到大,黑棋先是行号从大到小,同一行列号从小到大(但是棋子的类型都要按照KQRBNP顺序)。

模拟最重要的就是细节

用了一些操作让代码没那么繁琐。

还有一题输入和输出正好相反:传送门

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
using namespace std;
typedef long long ll;
const int maxn = 1e2 + ;
const int INF = << ;
int dir[][] = {,,,,-,,,-};
int T, n, m, x;
char Map[][];
map<char, vector<string> >M;
char a[] = "kqrbn";
char b[] = "KQRBN";
int main()
{
for(int i = ; i < ; i++)
for(int j = ; j < ; j++)cin >> Map[i][j];
vector<string>ans1, ans2;
for(int i = ; i <= ; i += )//从上往下扫描黑棋(小写字母)
{
for(int j = ; j <= ; j += )
{
string s;//位置字符串
s += (char)(j / + 'a');//列号
s += (char)(( - i) / + '');//行号 !!注意,这里最下面是编号第一行
//cout<<s<<endl;
if(Map[i][j] == 'p')ans1.push_back(s);
for(int k = ; k < ; k++)
{
if(Map[i][j] == a[k])
{
M[a[k]].push_back(s);
}
}
}
}
for(int i = ; i >= ; i -= )//从下往上扫描白棋(大写字母)
{
for(int j = ; j <= ; j += )
{
string s;//位置字符串
s += (char)(j / + 'a');//列号
s += (char)(( - i) / + '');//行号 !!注意,这里最下面是编号第一行
//cout<<s<<endl;
if(Map[i][j] == 'P')ans2.push_back(s);
for(int k = ; k < ; k++)
{
if(Map[i][j] == b[k])
{
M[b[k]].push_back(s);
}
}
}
}
printf("White: ");
int tot = , c = ;
for(int i = ; i < ; i++)tot += M[b[i]].size();
tot += ans2.size();
for(int i = ; i < ; i++)
{
for(int j = ; j < M[b[i]].size(); j++)
{
cout<<b[i]<<M[b[i]][j];
if(c != tot)
{
c++;
cout<<",";
}
}
}
for(int i = ; i < ans2.size(); i++)
{
cout<<ans2[i];
if(c != tot)
{
c++;
cout<<",";
}
}
cout<<endl;
printf("Black: ");
tot = , c = ;
for(int i = ; i < ; i++)tot += M[a[i]].size();
tot += ans1.size();
for(int i = ; i < ; i++)
{
for(int j = ; j < M[a[i]].size(); j++)
{
cout<<(char)(a[i] - )<<M[a[i]][j];
if(c != tot)
{
c++;
cout<<",";
}
}
}
for(int i = ; i < ans1.size(); i++)
{
cout<<ans1[i];
if(c != tot)
{
c++;
cout<<",";
}
}
cout<<endl;
return ;
}

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 Help Me with the Game

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

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

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

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

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

  5. 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 ...

  6. poj 1338 Ugly Numbers(丑数模拟)

    转载请注明出处:viewmode=contents">http://blog.csdn.net/u012860063? viewmode=contents 题目链接:id=1338&q ...

  7. POJ 3371 Flesch Reading Ease 无聊恶心模拟题

    题目:http://poj.org/problem?id=3371 无聊恶心题,还是不做的好,不但浪费时间而且学习英语. 不过为了做出点技术含量,写了个递归函数... 还有最后判断es,ed,le时只 ...

  8. 【POJ 3279 Fliptile】开关问题,模拟

    题目链接:http://poj.org/problem?id=3279 题意:给定一个n*m的坐标方格,每个位置为黑色或白色.现有如下翻转规则:每翻转一个位置的颜色,与其四连通的位置都会被翻转,但注意 ...

  9. 快速切题 poj 2993 Emag eht htiw Em Pleh 模拟 难度:0

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

  10. 【BZOJ3502/2288】PA2012 Tanie linie/【POJ Challenge】生日礼物 堆+链表(模拟费用流)

    [BZOJ3502]PA2012 Tanie linie Description n个数字,求不相交的总和最大的最多k个连续子序列. 1<= k<= N<= 1000000. Sam ...

随机推荐

  1. TypeScript入门(一)

    TypeScript是微软官方的一种语言,是JavaScript的超集.它遵循的ECMA Script 6.0是下一代的JavaScript.浏览器还没有完全支持ES6,而ES5是弱类型的语言,还没有 ...

  2. Mycat 分片规则详解--ASCII 取模范围分片

    实现方式:该算法与取模范围算法类似,该算法支持数值.符号.字母取模.首先截取长度为 prefixLength 的子串,在对子串中每一个字符的 ASCII 码求和,然后对求和值进行取模运算(sum%pa ...

  3. Algorithm --> 求阶乘末尾0的个数

    求阶乘末尾0的个数 (1)给定一个整数N,那么N的阶乘N!末尾有多少个0?比如:N=10,N!=3628800,N!的末尾有2个0. (2)求N!的二进制表示中最低位为1的位置. 第一题 考虑哪些数相 ...

  4. C++标准库vector类型的使用和操作总结

    vector是一种类型对象的集合,它是一种顺序容器,容器中的所有对象必须都是同一种类型.想了解顺序容器的更多内容:C++顺序容器知识总结.vector的对象是可以动态生长的,这说明它在初始化时可以不用 ...

  5. [HNOI2002]营业额统计_Treap

    [HNOI2002]营业额统计 题目大意:给你一串n数序列,对于每一个刚输入的数a,找到一个前面的数k,使得|a-k|最小. 注释:$n<=32767,ai<=10^6$. 想法:刚学Tr ...

  6. Tram

    Tram 题目大意:给你一个图,这个图上有n点和边.点上有开关,开关开始指向一条道路,拨动开关可以使开关指向由开关出发的任意一条路径,读入,a,b,求,至少要拨动几次才能从a点走到b点. 注释:n&l ...

  7. html5 geolocation配合百度地图api实现定位

    1.了解html5 geolocation HTML5 Geolocation(地理定位)用于定位用户的位置.鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的.=> 使用时 ...

  8. Ubuntu16.0.4的磁盘管理

    ubuntu下硬盘无损分区移动修改工具 原创 2014年04月13日 :: ubuntu上面其实有很好的分区调整工具,gparted,非常好使用 安装非常简单 sudo apt-get install ...

  9. drbd(三):drbd的状态说明

    本文目录:1.drbd配置文件2.状态 2.1 连接状态(connect state,cs)和复制状态 2.2 角色状态(roles,ro) 2.3 磁盘状态(disk state,ds) 2.4 I ...

  10. 听翁恺老师mooc笔记(15)--文件的输入与输出

    <>重定向 如果使用标准的printf输出,有一个比较简便的方法,可以将程序的结果写入一个文件.使用<和>符号,将程序运行结果重定向到文件中去,具体使用到的代码如下: ./te ...