題目意思: 有n個單詞需要輸入,第一個單詞必須要動手輸入。現在有兩種命令,“repeat the last word”復制最後一個單詞,“delete the last symbol”刪除最後一個單詞的最後一個字母。問我們最少需要動手輸入幾次
解題思路: 1:思路:排序+枚舉每個單詞
2:由於有了兩種命令,copy最後一個單詞和刪除最後一個單詞的最後一個字母,並且可以無限的使用,所以只要對這些單詞排序,然後判斷當前單詞和上一個單詞的關系即可
代碼:
[cpp]
#include <algorithm>
#include <iostream>
#include <cstring>
#include <string>
#include <vector>
#include <cstdio>
#include <stack>
#include <queue>
#include <set>
using namespace std;
#define MAXN 110
int t , n , ans;
string str[MAXN];
void solve() {
int i , j , k;
sort(str , str+n);//排序
ans = str[0].size();
for(i = 1 ; i < n ; i++){//枚舉
if(str[i][0] != str[i-1][0]){
ans += str[i].size();
continue;
}
for(j = 0 , k = 0 ; j < str[i-1].size() ; j++ , k++){
if(str[i-1][j] != str[i][k])
break;
}
ans += str[i].size()-k;
}
printf("%d\n" , ans);
for(i = 0 ; i < n ; i++)
cout<<str[i]<<endl;
}
int main() {
//freopen("input.txt" , "r" , stdin);
scanf("%d" , &t);
while(t--){
scanf("%d" , &n);
for(int i = 0 ; i < n ; i++)
cin>>str[i];
solve();
}
return 0;
}