题目链接:

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. Object.defineProperty实现数据绑定

    1.Object.defineProperty方法 Object.defineProperty(obj, prop, descriptor); (1)参数:  obj:目标对象 prop:需要定义的属 ...

  2. Spring Boot Druid数据源配置

    package com.hgvip.config; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.su ...

  3. newInstance()和new()的区别

    转载:http://www.jobui.com/mianshiti/it/java/7148/ newInstance: 弱类型.低效率.只能调用无参构造.new: 强类型.相对高效.能调用任何pub ...

  4. iOS 跑马灯带图片可点击

    项目中有个需求,需要以跑马灯的形势滚动展示用户的实时数据,跑马灯需要有用户头像,内容的长度不固定,并且可以点击,滚动效果还要足够流畅,本着不重复造轮子的心理,在网上各种搜索,发现都没法找到满足需求的d ...

  5. SQL注入之Sqli-labs系列第一篇

    在开始接触渗透测试开始,最初玩的最多的就是Sql注入,注入神器阿D.明小子.穿山甲等一切工具风靡至今.当初都是以日站为乐趣,从安全法实施后在没有任何授权的情况下,要想练手只能本地环境进行练手,对于sq ...

  6. 使用SQLiteOpenHelper类对数据库简单操作

    实现数据库基本操作       数据库创建的问题解决了,接下来就该使用数据库实现应用程序功能的时候了.基本的操作包括创建.读取.更新.删除,即我们通常说的CRUD(Create, Read, Upda ...

  7. 支付宝sdk集成,报系统繁忙 请稍后再试(ALI64)

    移动快捷支付,往往需要集成支付宝的sdk,集成的过程相对简单,只要按照支付宝的文档,进行操作一般不会出问题.            下面主要说明一下,集成sdk后报"系统繁忙 请稍后再试(A ...

  8. Beta冲刺Day2

    项目进展 李明皇 今天解决的进度 优化了信息详情页的布局:日期显示,添加举报按钮等 优化了程序的数据传递逻辑 明天安排 程序运行逻辑的完善 林翔 今天解决的进度 实现微信端消息发布的插入数据库 明天安 ...

  9. Flask 应用最佳实践

    一个好的应用目录结构可以方便代码的管理和维护,一个好的应用管理维护方式也可以强化程序的可扩展性 应用目录结构 假定我们的应用主目录是"flask-demo",首先我们建议每个应用都 ...

  10. 201421123042 《Java程序设计》第3周学习总结

    #Week03-面向对象入门 1. 本周学习总结 1.1写出你认为本周学习中比较重要的知识点关键词,如类.对象.封装等 本周学习关键词:类,对象,封装,关键词:final,this,statis. 1 ...