【POJ2996】Help Me with the Game
本题知识点:模拟(如果对国际象棋不熟悉的同学可以先百度一下)
题意很简单,就是让我们找出白棋跟黑棋每枚棋子的位置,并要按照一定的顺序输出( 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的更多相关文章
- 【POJ2993】Emag eht htiw Em Pleh
		
题目传送门 本题知识点:模拟(如果对国际象棋不熟悉的同学可以先百度一下) 本题跟POJ2996是逆过来的操作,如果做过[POJ2996]的同学就不会对题意不理解的了. (以下默认您已AC[POJ299 ...
 - 【转】ACM训练计划
		
[转] POJ推荐50题以及ACM训练方案 -- : 转载自 wade_wang 最终编辑 000lzl POJ 推荐50题 第一类 动态规划(至少6题, 和 必做) 和 (可贪心) (稍难) 第二类 ...
 - Python高手之路【六】python基础之字符串格式化
		
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
 - 【原】谈谈对Objective-C中代理模式的误解
		
[原]谈谈对Objective-C中代理模式的误解 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这篇文章主要是对代理模式和委托模式进行了对比,个人认为Objective ...
 - 【原】FMDB源码阅读(三)
		
[原]FMDB源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 FMDB比较优秀的地方就在于对多线程的处理.所以这一篇主要是研究FMDB的多线程处理的实现.而 ...
 - 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
		
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
 - 【调侃】IOC前世今生
		
前些天,参与了公司内部小组的一次技术交流,主要是针对<IOC与AOP>,本着学而时习之的态度及积极分享的精神,我就结合一个小故事来初浅地剖析一下我眼中的“IOC前世今生”,以方便初学者能更 ...
 - Python高手之路【三】python基础之函数
		
基本数据类型补充: set 是一个无序且不重复的元素集合 class set(object): """ set() -> new empty set object ...
 - Python高手之路【一】初识python
		
Python简介 1:Python的创始人 Python (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种解释型.面向对象.动态数据类型的高级程序设计语言,由荷兰人Guido ...
 
随机推荐
- Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究
			
Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究 一丶反射 什么是反射:  反射的概念是由Smith在1982年首次提出的 ...
 - 必须掌握的Linux用户组知识
			
在 Linux 系统中用户组起着重要作用.用户组提供了一种简单方法供一组用户互相共享文件.用户组也允许系统管理员更加有效地管理用户权限,因为管理员可以将权限分配给用户组而不是逐一分配给单个用户. 尽管 ...
 - Ext.create使用(上)
			
本文介绍前两种使用方法: 通过full name, alias 或者 alternate name实例化一个类 // 别名 // alias var window = Ext.create('widg ...
 - Android存储及getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()区别
			
存储介绍 Android系统分为内部存储和外部存储,内部存储是手机系统自带的存储,一般空间都比较小,外部存储一般是SD卡的存储,空间一般都比较大,但不一定可用或者剩余空间可能不足.一般我们存储内容都会 ...
 - 多代理切换 MultiProxy
			
配置代理选项 添加代理列表 ie配置代理 开始使用
 - Celery:Monitor
			
参考文档:http://docs.celeryproject.org/en/latest/userguide/monitoring.html#guide-monitoring
 - 初识osquery
			
初识osquery osquery是一个由Facebook的开源用于对系统进行查询,监控以及分析的一款软件. osquery对其的说明如下: osquery将操作系统公开为高性能关系数据库.这允许您编 ...
 - 经典sql server基础语句不全
			
1.几个简单的基本的sql语句 选择: select * from table1 where 范围 插入: insert into table1(field1,field2) values(value ...
 - 18.centos7基础学习与积累-004-分区理论
			
1.从头开始积累centos7系统运用 大牛博客:https://blog.51cto.com/yangrong/p5 1.常规分区:数据不是特别重要的业务(集群的某个节点) /boot 引导分区 ...
 - 数据库开发-Django ORM的单表查询
			
数据库开发-Django ORM的单表查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查询集 1>.查询集相关概述 查询会返回结果的集,它是django.db.mod ...