题目传送门

本题知识点:模拟(如果对国际象棋不熟悉的同学可以先百度一下

题意很简单,就是让我们找出白棋跟黑棋每枚棋子的位置,并要按照一定的顺序输出( K -> Q -> R -> B -> N -> P ),清楚这一目的的话,实现只是时间上的问题了。

感觉该题可以用C语言里的枚举变量,但因为很少用,所以就懒得去琢磨了(好学的同学不要学我啊!),改用了比较麻烦的方式。

至于如何顺利地按顺序输出,这个见仁见智啦。

数据很小(快乐水题),即便暴力枚举也不会超时。

// POJ 2996
#include<iostream>
#include<cstdio>
using namespace std;
const int H = 17;
char ch[40][40]; struct node{
string pla;
}white[20], black[20]; char who_w[20] = {"KQRRBBNNPPPPPPPP"};
char who_b[20] = {"kqrrbbnnpppppppp"}; int main()
{
for(int i = 1; i <= H; i++){
scanf("%s", ch[i] + 1);
} int w = 0, cnt_w = 0;
while(w < 16){
for(int i = 16; i >= 2; i -= 2){
bool ok = false;
for(int j = 3; j <= 31; j += 4){
if(ch[i][j] == who_w[w]){
string a = "";
if(w < 8) a += ch[i][j];
a += j / 4 + 'a';
if(i == 16) a += '1';
else if(i == 14) a += '2';
else if(i == 12) a += '3';
else if(i == 10) a += '4';
else if(i == 8) a += '5';
else if(i == 6) a += '6';
else if(i == 4) a += '7';
else if(i == 2) a += '8';
// cout << "a:" << a << endl;
white[cnt_w++].pla = a;
ch[i][j] = '*';
ok = true;
break;
}
}
if(ok) break;
}
w++;
}
// cout << endl;
int b = 0, cnt_b = 0;
while(b < 16){
for(int i = 2; i <= 16; i += 2){
bool ok = false;
for(int j = 3; j <= 31; j += 4){
if(ch[i][j] == who_b[b]){
string a = "";
if(b < 8) a += who_w[b];
a += j / 4 + 'a';
if(i == 16) a += '1';
else if(i == 14) a += '2';
else if(i == 12) a += '3';
else if(i == 10) a += '4';
else if(i == 8) a += '5';
else if(i == 6) a += '6';
else if(i == 4) a += '7';
else if(i == 2) a += '8';
// cout << "a:" << a << endl;
black[cnt_b++].pla = a;
ch[i][j] = '*';
ok = true;
break;
}
}
if(ok) break;
}
b++;
} printf("White: ");
for(int i = 0; i < cnt_w; i++){
if(i != 0) cout << ",";
cout << white[i].pla;
} cout << endl; printf("Black: ");
for(int i = 0; i < cnt_b; i++){
if(i != 0) cout << ",";
cout << black[i].pla;
} cout << endl; return 0;
}

【POJ2996】Help Me with the Game的更多相关文章

  1. 【POJ2993】Emag eht htiw Em Pleh

    题目传送门 本题知识点:模拟(如果对国际象棋不熟悉的同学可以先百度一下) 本题跟POJ2996是逆过来的操作,如果做过[POJ2996]的同学就不会对题意不理解的了. (以下默认您已AC[POJ299 ...

  2. 【转】ACM训练计划

    [转] POJ推荐50题以及ACM训练方案 -- : 转载自 wade_wang 最终编辑 000lzl POJ 推荐50题 第一类 动态规划(至少6题, 和 必做) 和 (可贪心) (稍难) 第二类 ...

  3. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  4. 【原】谈谈对Objective-C中代理模式的误解

    [原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...

  5. 【原】FMDB源码阅读(三)

    [原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...

  6. 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新

    [原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...

  7. 【调侃】IOC前世今生

    前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...

  8. Python高手之路【三】python基础之函数

    基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...

  9. Python高手之路【一】初识python

    Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...

随机推荐

  1. MVC中根据后台绝对路径读取图片并显示在IMG中

    数据库存取图片并在MVC3中显示在View中 根据路径读取图片: byte[] img = System.IO.File.ReadAllBytes(@"d:\xxxx.jpg"); ...

  2. linq根据英文首字母姓名排序

    names.Sort((a, b) => a.name.CompareTo(b.name));

  3. 小知识:讲述Linux命令别名与资源文件的区别

    别名 别名是命令的快捷方式.为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用.语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令.重要的 ...

  4. Java GC的工作原理详解

    JVM学习笔记之JVM内存管理和JVM垃圾回收的概念,JVM内存结构由堆.栈.本地方法栈.方法区等部分组成,另外JVM分别对新生代下载地址  和旧生代采用不同的垃圾回收机制. 首先来看一下JVM内存结 ...

  5. SQL Server 用一张表的数据更新另一张表的数据(转载)

    文章一:SQL Server中如何基于一个表的数据更新另一个表的对应数据的SQL语句脚本 https://codedefault.com/2017/sql-server-update-from-a-s ...

  6. 【hadoop】hadoop3.2.0应用环境搭建与使用指南

    下面列出我搭建hadoop应用环境的文章整理在一起,不定期更新,供大家参考,互相学习!!! 杂谈篇: [英语学习]Re-pick up English for learning big data (n ...

  7. RocketMQ-Console安装

    1.获取源码 git clone -b release-rocketmq-console- https://github.com/apache/rocketmq-externals.git 2.进入工 ...

  8. FreeBSD设置开机同步时间

    没有设置开机同步时间的话,重启之后时间不对. 如果装机时没正确设置时区,先设置时区:# tzsetup 用date命令手工设置时间一方面不方便,另一方面也依赖于本地管理员的时钟的正确性,那么网络上不同 ...

  9. 一加5安卓P刷入twrp的recovery

    本文介绍的方法属于普适性的一般方法,比网上的各种工具箱会繁琐.但是工具箱不一定一直会更新(之前一加论坛的刷机工具箱已经停止更新了,估计是作者不用一加5了吧,毕竟已经好几年的手机了).并且如果你手机更新 ...

  10. 关于c++中的类型转换符

    const_cast(链接) 用来去掉const或volatile属性 volatile: 用于并行设备的硬件寄存器(状态寄存器), 中断服务子程序中会访问到的非自动变量, 多线程中被几个任务共享的变 ...