uva - 10602 - Editor Nottoobad(贪心)

来源:互联网 发布:网络知识竞赛的网址 编辑:程序博客网 时间:2024/06/04 23:14

题意:给你几个单词,第一个单词必须手动打印,后边的单词可以通过“重复最后一个单词”“删除最后的字母”(当然也可以打印)转换得到,求最小的操作次数。

方法:字典序排序+枚举。输出具有一定的迷惑性,千万要注意它说的如果输出有多种,任意输出一种就行。

AC代码:

#include <iostream>    #include <iomanip>    #include <string>    #include <cstring>    #include <cstdio>    #include <queue>    #include <stack>    #include <algorithm>    #include <cmath>    #include <ctime>using namespace std;  const int maxn = 100+10;void Solve(string *word, int N, int ans){int i = 0, j = 0;sort(word, word+N);ans = word[0].size();for (i = 1; i < N; i++){if (word[i][0] != word[i-1][0])ans += word[i].size();else{for (j = 0; j < word[i].size() && j < word[i-1].size(); j++){if (word[i][j] != word[i-1][j])break;}ans += word[i].size() - j;}}cout << ans << endl;for (i = 0; i < N; i++)cout << word[i] << endl;}int main(){#ifdef Local      freopen("a.in", "r", stdin);  #endifint T = 0;cin >> T;while (T--){int N = 0, i = 0, ans = 0;string word[maxn];cin >> N;for (i = 0; i < N; i++)cin >> word[i];Solve(word, N, ans);}return 0;}


最近A的第一道uva啊希望能来点状态,一天A1~2道。

1 0
原创粉丝点击