POJ 3617 http://poj.org/problem?id=3617
题目大意:
给定一串字符串,要求从这串字符串前/后依次选择一个字符组成新串,要求形成的新串字典序最小。
解题思路:
贪心,依次比较开头与末尾的字符串,选择较小的一方填入新串即可(若相同即均可)。
AC代码:
#include <iostream>
#include <cstdio>
using namespace std;
const int MAX = 2005;
int N;
char s[MAX];
char ans[MAX];
int cnt = 0;
void solve() {
int a = 0,b = N - 1;
while(a <= b) {
bool left = false;
for(int i = 0; i + a <= b; i++) {
if (s[a + i] < s[b - i]) {
left = true;
cnt++;
break;
} else if (s[a + i] > s[b - i]) {
left = false;
cnt++;
break;
}
}
if(left) cout << s[a++];
if(!left) cout << s[b--];
if(cnt % 80 ==0) cout << endl;
}
}
int main() {
cin >> N;
for(int i = 0; i < N; i++) {
cin >> s[i];
}
solve();
cout << endl;
return 0;
}
PE提示:注意每80个字符题目要求换行。