poj3617 贪心

题意:给定长度为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();
}


你可能感兴趣的:(poj,贪心)