本文共 662 字,大约阅读时间需要 2 分钟。
题意:给定长度为N的字符串S,要构造一个长度为N的字符串T。起初,T是一个空串,随后反复进行下列任意操作: 从S的头部删除一个字符,加到T的尾部 从S的尾部删除一个字符,加到T的尾部 目标是使T字典序最小,输出时每行最多80个字符。算法:贪心。每次选择S头部或尾部最小的字符,如果两者相同,继续比较下一个字符,直到找到较小的字符。
#includeusing namespace std;int N;char c[2010];void solve(){ int l = 0; int r = N - 1; bool left, right; left = true; int cnt = 0; while (l <= r) { int i; for (i=0; i+l c[r-i]) { left = false; break; } else if (c[i+l] < c[r-i]) { left = true; break; } } left? cout << c[l++] : cout << c[r--]; cnt++; if (cnt % 80 == 0) { cout << endl; } } if (cnt % 80 != 0) { cout << endl; }}int main(){ cin >> N; for (int i=0; i > c[i]; } solve();}
转载地址:http://arlbb.baihongyu.com/