uva 10602 - Editor Nottoobad
题目意思: 有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;
}
补充:软件开发 , C++ ,