题意:给定一些单词,然后让打印这些单词,复制前一个单词和删除当前的最后一个字母没有花费,问最小的打印花费。
思路:贪心。排序后,检查当前和上一个单词有多少一样的,这部分的花费可以为0.也就是总的减去这部分的。
code:
#include <bits/stdc++.h>
using namespace std;
string s[105];
int main()
{
int T,n;
scanf("%d",&T);
while (T--){
scanf("%d",&n);
for (int i=0;i<n;i++){
cin>>s[i];
}
sort(s,s+n);
int ans=s[0].size();
for (int i=1;i<n;i++){
int t=0;
for (int j=0;j<s[i-1].size();j++)
if(s[i][j]==s[i-1][j]) t++;
else break;
ans+=s[i].size()-t;
}
printf("%d\n",ans);
for (int i=0;i<n;i++)
cout<<s[i]<<endl;
}
}