c++小妖怪排好队

描述

牛魔王即将带着他的N(1≤ N ≤ 2,000)个小妖怪参加一年一度的“年度大王”比赛。在这场比赛中,每个大王都把他的手下排成一排,然后把它们放到评委身边。今年的比赛组织者采用了一种新的注册方案:只需按照每名手下出现的顺序注册它们的首字母(即,如果牛魔王按照这个顺序注册贝壳精,狮子精和袋鼠精,他只需注册BSD)。注册阶段结束后,根据名字首字母的字符串,按词典顺序对每个小组进行评判。牛魔王今年很忙,必须赶回山头,所以他希望尽早被评判。他决定在登记之前重新安排已经排好队的手下。牛魔王标志着一个新的竞争妖怪系列的位置。然后,他继续将小妖怪从旧排队线编组到新排队线,方法是反复将原始线中的第一头或最后一头小妖怪送到新线的末尾。当他完成后,牛魔王带着他的小妖怪们按照这个新顺序进行登记。给定他的妖怪们的初始顺序,确定他可以通过这种方式制作的最少的词典首字母串。

输入描述

第 1 行:单个整数:N ,后 N+1 行:第 i+1 行包含单个首字母: 'A'..'Z', (表示小妖怪在原始行中第 i 个位置的)

输出描述

牛魔王能做的最少的词典字符串。每一行(可能最后一行除外)都包含80个小妖怪的首字母('A'...'Z') 在新行中。


注意事项

  1. 这是一道贪心
  2. 输出80个字符要换行
  3. 跟牛魔王没有一毛钱关系

做题思路

  1. 贪心:开头小,选开头;结尾小,选结尾
  2. 如果一样大,就一直向里面比较

代码来啦

#include<iostream>
using namespace std;
char a[2005];
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int l=1,r=n;
int cnt=0;
while(l<=r){
if(a[l]<a[r]){
cout<<a[l];
l++;
} else {
if(a[l]>a[r]){
cout<<a[r];
r--;
} else {
int ll=l,rr=r;
while(ll<=rr && a[ll]==a[rr]){
ll++;
rr--;
}
if(a[ll]<=a[rr]){
cout<<a[l];
l++;
} else {
cout<<a[r];
r--;
}
}
}
cnt++;
if(cnt%80==0){
cout<<endl;
}
}
return 0;
}

posted on   可爱楷玩算法  阅读(8)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示