POJ-2996 Help Me with the Game---模拟棋子
题目链接:
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---模拟棋子的更多相关文章
- poj 2996 Help Me with the Game(模拟)
题目:http://poj.org/problem?id=2996 题意:给出 棋盘 情况 输出 白棋 和 黑棋在 棋盘上的 白棋为大写字母 黑棋为小写字母 棋盘 左下点为原点(1,a) 输出 是 按 ...
- 模拟 POJ 2996 Help Me with the Game
题目地址:http://poj.org/problem?id=2996 /* 题意:给出白方和黑方的棋子和对应的坐标,输出该副棋盘的样子 模拟题 + 结构体排序:无算法,switch区分读入的字符,按 ...
- POJ 2996 & 2993 国际象棋布局 模拟
Description Your task is to read a picture of a chessboard position and print it in the chess notati ...
- 快速切题 poj 2996 Help Me with the Game 棋盘 模拟 暴力 难度:0
Help Me with the Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3510 Accepted: ...
- 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 ...
- poj 1338 Ugly Numbers(丑数模拟)
转载请注明出处:viewmode=contents">http://blog.csdn.net/u012860063? viewmode=contents 题目链接:id=1338&q ...
- POJ 3371 Flesch Reading Ease 无聊恶心模拟题
题目:http://poj.org/problem?id=3371 无聊恶心题,还是不做的好,不但浪费时间而且学习英语. 不过为了做出点技术含量,写了个递归函数... 还有最后判断es,ed,le时只 ...
- 【POJ 3279 Fliptile】开关问题,模拟
题目链接:http://poj.org/problem?id=3279 题意:给定一个n*m的坐标方格,每个位置为黑色或白色.现有如下翻转规则:每翻转一个位置的颜色,与其四连通的位置都会被翻转,但注意 ...
- 快速切题 poj 2993 Emag eht htiw Em Pleh 模拟 难度:0
Emag eht htiw Em Pleh Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2806 Accepted: ...
- 【BZOJ3502/2288】PA2012 Tanie linie/【POJ Challenge】生日礼物 堆+链表(模拟费用流)
[BZOJ3502]PA2012 Tanie linie Description n个数字,求不相交的总和最大的最多k个连续子序列. 1<= k<= N<= 1000000. Sam ...
随机推荐
- TypeScript入门(一)
TypeScript是微软官方的一种语言,是JavaScript的超集.它遵循的ECMA Script 6.0是下一代的JavaScript.浏览器还没有完全支持ES6,而ES5是弱类型的语言,还没有 ...
- Mycat 分片规则详解--ASCII 取模范围分片
实现方式:该算法与取模范围算法类似,该算法支持数值.符号.字母取模.首先截取长度为 prefixLength 的子串,在对子串中每一个字符的 ASCII 码求和,然后对求和值进行取模运算(sum%pa ...
- Algorithm --> 求阶乘末尾0的个数
求阶乘末尾0的个数 (1)给定一个整数N,那么N的阶乘N!末尾有多少个0?比如:N=10,N!=3628800,N!的末尾有2个0. (2)求N!的二进制表示中最低位为1的位置. 第一题 考虑哪些数相 ...
- C++标准库vector类型的使用和操作总结
vector是一种类型对象的集合,它是一种顺序容器,容器中的所有对象必须都是同一种类型.想了解顺序容器的更多内容:C++顺序容器知识总结.vector的对象是可以动态生长的,这说明它在初始化时可以不用 ...
- [HNOI2002]营业额统计_Treap
[HNOI2002]营业额统计 题目大意:给你一串n数序列,对于每一个刚输入的数a,找到一个前面的数k,使得|a-k|最小. 注释:$n<=32767,ai<=10^6$. 想法:刚学Tr ...
- Tram
Tram 题目大意:给你一个图,这个图上有n点和边.点上有开关,开关开始指向一条道路,拨动开关可以使开关指向由开关出发的任意一条路径,读入,a,b,求,至少要拨动几次才能从a点走到b点. 注释:n&l ...
- html5 geolocation配合百度地图api实现定位
1.了解html5 geolocation HTML5 Geolocation(地理定位)用于定位用户的位置.鉴于该特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的.=> 使用时 ...
- Ubuntu16.0.4的磁盘管理
ubuntu下硬盘无损分区移动修改工具 原创 2014年04月13日 :: ubuntu上面其实有很好的分区调整工具,gparted,非常好使用 安装非常简单 sudo apt-get install ...
- drbd(三):drbd的状态说明
本文目录:1.drbd配置文件2.状态 2.1 连接状态(connect state,cs)和复制状态 2.2 角色状态(roles,ro) 2.3 磁盘状态(disk state,ds) 2.4 I ...
- 听翁恺老师mooc笔记(15)--文件的输入与输出
<>重定向 如果使用标准的printf输出,有一个比较简便的方法,可以将程序的结果写入一个文件.使用<和>符号,将程序运行结果重定向到文件中去,具体使用到的代码如下: ./te ...