题目:http://acm.hdu.edu.cn/showproblem.php?pid=3460
据说可以用字典树,但是不会。。我是用排序做的。有点贪心的感觉。
其实 ans=输出(n)+ 相邻的两字符串不同的部分*2 - 最大字符串(最后保留部分。)
下面是AC代码;
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
bool cmp(const string &a,const string &b)
{
return strcmp(a.c_str(),b.c_str())<0;
}
int main()
{
int n,i,j;
char name[100];
while(EOF!=scanf("%d",&n))
{
vector<string> vec;
for(i=0;i<n;i++)
{
scanf("%s",name);
vec.push_back(string(name));
}
sort(vec.begin(),vec.end(),cmp);
int ans=0;
int max=vec[0].size();
ans+=vec[0].size();
for(i=1;i<n;i++)
{
for(j=0;j<vec[i-1].size()&&j<vec[i].size();j++)
{
if(vec[i][j]!=vec[i-1][j])
break;
}
ans+=vec[i].size()-j;
if(vec[i].size()>max) max=vec[i].size();
}
cout<<n+2*ans-max<<endl;
}
return 0;
}