poj3617 贪心

来源:互联网 发布:共产主义社会 知乎 编辑:程序博客网 时间:2024/06/10 15:41
题意:给定长度为N的字符串S,要构造一个长度为N的字符串T。起初,T是一个空串,随后反复进行下列任意操作: 
从S的头部删除一个字符,加到T的尾部
从S的尾部删除一个字符,加到T的尾部

目标是使T字典序最小,输出时每行最多80个字符。

算法:贪心。每次选择S头部或尾部最小的字符,如果两者相同,继续比较下一个字符,直到找到较小的字符。


#include <iostream>using 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<r; i++){if (c[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<N; i++){cin >> c[i];}solve();}


0 0
原创粉丝点击