【POJ】3617 Best Cow Line (字典序 字符串)

http://poj.org/problem?id=3617

给定长度为N(1≤N≤2000)的字符串S,要构造一个长度为N的字符串T。期初,T是一个空串,随后反复进行下列任意操作。

从S的头部删除一个字符,加到T的尾部

从S的尾部删除一个字符,加到T的尾部

目标是要构造字典序尽可能小的字符串

 

先比较首尾的字符,注意会有相等的情况,所以相等的话要继续往里比较,直到不相等为止

#include 
#include 

using namespace std;

int main ()
{
	string str,c;
	int n,i;
	cin >> n;
	for(i=0;i> c;
		str += c;
	} 
	int a = 0;
	int b = n - 1;
	int ans = 0;
	while(a<=b)
	{
		bool flag = false;
		for(i=0;i+a<=b;i++)
		{
			if(str[a+i]str[b-i])
			{
				flag = false;
				break;
			}
		}
		if(flag)
			cout << str[a++];
		else
			cout << str[b--];
		ans++;
		if(ans==80)
		{
			cout << endl;
			ans = 0;
		}	
	}
	return 0;
} 

 

 

也可以用string + reverse来写

不用逐一来比较,直接用string的大小来比较

#include 
#include 
#include 

using namespace std;

int main ()
{
	int i,n;
	string s,c,t;
	cin >> n;
	for(i=0;i> c;
		s += c;
	}
	t = s;
	int ans = 0;
	while(s.length())
	{
		reverse(t.begin(),t.end());
		if(t>s)
		{
			cout << s[0];
			s.erase(0,1);
			t = s;
		}
		else
		{
			cout << t[0];
			t.erase(0,1);
			s = t;
		}
		ans++;
		if(ans==80)
		{
			cout << endl;
			ans = 0;
		}
	}
	return 0;
} 

 

你可能感兴趣的:(POJ)