您的位置:首页 > 其它

Uva - 1610 - Party Games

2015-06-22 20:27 369 查看




细节题目,排序之后拿中间的两个比较,比较麻烦,注意每种可能性,调试了好久,WA了好几次。

AC代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <cstring>
#include <string>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <algorithm>
#include <stack>
#include <queue>
#include <bitset>
#include <cassert>
#include <cmath>
#include <functional>

using namespace std;

const int maxn = 1010;
string s[maxn];

void solve(int a1, int a2)
{
char ans[100];
int len1 = s[a1].size();
int len2 = s[a2].size();
if (len1 < len2) {
int t = 0;
for (int i = 0; i < len1; i++) {
if (i == len1 - 1) {
ans[t++] = s[a1][i]; break;
}//刚开始忽略
if (s[a1][i] == s[a2][i]) {
ans[t++] = s[a1][i];
}
if (s[a1][i] != s[a2][i]) {
ans[t++] = s[a1][i] + 1;
break;
}
}
for (int i = 0; i < t; i++) {
cout << ans[i];
}
}
else {
int t = 0;
for (int i = 0; i < len2; i++) {
if (s[a1][i] == s[a2][i]) {
ans[t++] = s[a1][i];
}
if (s[a1][i] != s[a2][i]) {
if (i != len2 - 1) {
ans[t++] = s[a1][i] + 1;
break;
}
else {
if (i == len1 - 1) { //刚开始忽略
ans[t++] = s[a1][i];
break;
}
char ch1 = s[a1][i] + 1;
if (s[a2][i] != ch1) {
ans[t++] = ch1;
break;
}
else {
ans[t++] = s[a1][i];
for (int j = i + 1; j < len1; j++) {
if (j == len1 - 1) {
ans[t++] = s[a1][j];
break;
}
if (s[a1][j] != 'Z') {
ans[t++] = s[a1][j] + 1;
break;
}
else {
ans[t++] = s[a1][j];
}
}
for (int k = 0; k < t; k++) {
cout << ans[k];
}
return;
}
}
}
}
for (int i = 0; i < t; i++) {
cout << ans[i];

}
return;
}
}

int main()
{
int n;
while (cin >> n)
{
if (n == 0) break;
for (int i = 0; i < n; i++) {
cin >> s[i];
}
sort(s, s + n);
int a1 = (n - 1) / 2;
int a2 = a1 + 1;
solve(a1, a2);
cout << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: