首页 > 代码库 > poj3617Best Cow Line

poj3617Best Cow Line

题意大概是这样,给你一个字符串,你可以进行的操作是这样的,
每次拿走这个串的第一个字母,或者最后一个字母,然后放到
一个新串的末尾(当然啦,新串一开始是为空的),当把旧串
里的所有字母拿掉,这个时候就形成了一个字母以及长度都跟
旧串一样的新串。现在要求使这个新串的字典序最小。

我的做法是用贪心,每次比较旧串的第一个和末尾的字母,谁小
就放在第一个。遇到两个字母相同的时候,就比较第二个字母和
倒数第二个字母,以此类推。直到找到两个不同的字母为止,如果
前面的小就输出旧串第一个字母,否则就输出末尾字母。

如果都是相同的字母的话呢,随便输出哪个就好了。

我的代码如下:

 

#include<cstdio>
int num;
char cs[2010];
void init()
{
	char tmp[2];
	int i;
	scanf("%d",&num);
	for(i=0;i<num;i++)
	{
		scanf("%s",tmp);
		cs[i]=tmp[0];
	}
}
void result()
{
	bool flag=1;
	int sum,l,r,i;
	l=sum=0;
	r=num-1;
	while(l<=r)
	{
		for(i=0;l+i<r-i;i++)
			if(cs[l+i]<cs[r-i])
			{
				flag=1;
				break;
			}
			else if(cs[l+i]>cs[r-i])
			{
				flag=0;
				break;
			}
		if(flag)
		{
			putchar(cs[l]);
			l++;
		}
		else
		{
			putchar(cs[r]);
			r--;
		}
		sum++;
		if(sum%80==0)
			printf("\n");
	}
}
int main()
{
	init();
	result();
}