c++小妖怪排好队
描述
牛魔王即将带着他的N(1≤ N ≤ 2,000)个小妖怪参加一年一度的“年度大王”比赛。在这场比赛中,每个大王都把他的手下排成一排,然后把它们放到评委身边。今年的比赛组织者采用了一种新的注册方案:只需按照每名手下出现的顺序注册它们的首字母(即,如果牛魔王按照这个顺序注册贝壳精,狮子精和袋鼠精,他只需注册BSD)。注册阶段结束后,根据名字首字母的字符串,按词典顺序对每个小组进行评判。牛魔王今年很忙,必须赶回山头,所以他希望尽早被评判。他决定在登记之前重新安排已经排好队的手下。牛魔王标志着一个新的竞争妖怪系列的位置。然后,他继续将小妖怪从旧排队线编组到新排队线,方法是反复将原始线中的第一头或最后一头小妖怪送到新线的末尾。当他完成后,牛魔王带着他的小妖怪们按照这个新顺序进行登记。给定他的妖怪们的初始顺序,确定他可以通过这种方式制作的最少的词典首字母串。
输入描述
第 1 行:单个整数:N ,后 N+1 行:第 i+1 行包含单个首字母: 'A'..'Z', (表示小妖怪在原始行中第 i 个位置的)
输出描述
牛魔王能做的最少的词典字符串。每一行(可能最后一行除外)都包含80个小妖怪的首字母('A'...'Z') 在新行中。
注意事项
- 这是一道贪心
- 输出80个字符要换行
跟牛魔王没有一毛钱关系
做题思路
- 贪心:开头小,选开头;结尾小,选结尾
- 如果一样大,就一直向里面比较
代码来啦
#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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)