http://poj.org/problem?id=2996
POJ里面有这种巨坑的模拟题?注意两个关键字的比较函数的写法,第一个应该是不等号!写多这种,焦作区域赛就不怕了。
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<map>
#include<set>
#include<stack>
#include<string>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;
char g[200][200];
vector<string> vec[7];
int id[128];
char aid[7];
bool cmpw(const string &s1, const string s2) {
if(s1.length() == 2) {
return s1[1] != s2[1] ? s1[1] < s2[1] : s1[0] < s2[0];
} else {
return s1[2] != s2[2] ? s1[2] < s2[2] : s1[1] < s2[1];
}
}
bool cmpb(const string &s1, const string s2) {
if(s1.length() == 2) {
return s1[1] != s2[1] ? s1[1] > s2[1] : s1[0] < s2[0];
} else {
return s1[2] != s2[2] ? s1[2] > s2[2] : s1[1] < s2[1];
}
}
int main() {
#ifdef Yinku
freopen("Yinku.in", "r", stdin);
#endif // Yinku
id['k'] = 1;
id['q'] = 2;
id['r'] = 3;
id['b'] = 4;
id['n'] = 5;
id['p'] = 6;
aid[1] = 'k';
aid[2] = 'q';
aid[3] = 'r';
aid[4] = 'b';
aid[5] = 'n';
aid[6] = 'p';
for(int i = 1; i <= 17; ++i)
scanf("%s", g[i] + 1);
for(int i = 2; i <= 16; i += 2) {
for(int j = 3; j <= 31; j += 4) {
for(int k = 1; k <= 6; ++k) {
if(g[i][j] == char(aid[k] - 32)) {
string tmp;
if(k != 6)
tmp += char(aid[k] - 32);
tmp += char('a' - 1 + (j + 1) / 4);
tmp += char('0' + 9 - i / 2);
vec[k].push_back(tmp);
}
}
}
}
cout << "White: ";
int out = 0;
for(int k = 1; k <= 6; ++k) {
sort(vec[k].begin(), vec[k].end(), cmpw);
for(int i = 0; i < vec[k].size(); ++i) {
if(out) {
cout << ",";
} else {
out = 1;
}
cout << vec[k][i];
}
vec[k].clear();
}
cout << endl;
for(int i = 2; i <= 16; i += 2) {
for(int j = 3; j <= 31; j += 4) {
for(int k = 1; k <= 6; ++k) {
if(g[i][j] == aid[k]) {
string tmp;
if(k != 6)
tmp += char(aid[k] - 32);
tmp += char('a' - 1 + (j + 1) / 4);
tmp += char('0' + 9 - i / 2);
vec[k].push_back(tmp);
}
}
}
}
cout << "Black: ";
out = 0;
for(int k = 1; k <= 6; ++k) {
sort(vec[k].begin(), vec[k].end(), cmpb);
for(int i = 0; i < vec[k].size(); ++i) {
if(out) {
cout << ",";
} else {
out = 1;
}
cout << vec[k][i];
}
vec[k].clear();
}
cout << endl;
}
POJ - 2996 - Help Me with the Game = 模拟
原文:https://www.cnblogs.com/Inko/p/11715653.html