您的位置:首页 > 其它

poj 3617贪心

2016-05-21 18:38 204 查看
点击打开链接

<pre name="code" class="cpp">#include <iostream>
#define M 2100
using namespace std;
int main()
{
char str[M][1],s[M];
int n,i,f,l,k,a,b;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>str[i];
}
k=0;
f=1;l=n;
while(k<n)
{
a=f; b=l;
while(str[a][0]==str[b][0]&&a<=b)	//若相等 为了保证 前面的部分要较小 应该尽早的使用较小的字符
{
a++;
b--;
}
++k;
if(str[a][0]<str[b][0]) //选的加在s的尾部时->选的数从前往后排
//要求字典序最小 -> 前面的部分要较小 -> 贪心:把大的留在后面选  每次都选当前最小的
{
s[k]=str[f][0];
f++;
}
else
{
s[k]=str[l][0];
l--;
}
}
for(i=1;i<=n;i++)
{
cout<<s[i];
if(i%80==0&&i!=n) //格式 满80个字符换行
cout<<endl;
}
return 0;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: