AT_abc416_g 题解
也许是双倍经验?哇,居然是“AT 原题在 AT”!
题目就是说,给你
乍一看,诶,是不是一个排序的事儿?G 这么简单?高高兴兴敲完代码,呃完蛋,最后一个样例过不了!
所以啦,当然没有这么简单!
首先我们的这
让我们使出终极大招——如果要判断
我们用这玩意儿排序!写成 cmp 比较函数。
接下来呢?考虑
但是
也很简单,那我们就查看后缀需要被替换成什么呗!
具体来说就是,当前我们维护出一个后缀
什么时候结束?这不是显然意见的嘛!当然是等到
代码超级短的,甚至 D 代码都比它长。
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int n,k;string s[N],ans;
bool cmp(string s1,string s2){
return (s1+s2==s2+s1?s1<s2:s1+s2<s2+s1);
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++)cin>>s[i];
sort(s+1,s+n+1,cmp);ans="";
while(k>0&&ans.size()<s[1].size()){
string tmp=s[1]+ans;k--;
for(int i=2;i<=n;i++)tmp=min(tmp,s[i]+ans);ans=tmp;
}
while(k--)cout<<s[1];cout<<ans<<"\n";
return 0;
}
最后求各位留一个小小的赞,真是太谢谢啦!