題意:給你幾個單詞,第一個單詞必須手動打印,後邊的單詞可以通過“重復最後一個單詞”“刪除最後的字母”(當然也可以打印)轉換得到,求最小的操作次數。
方法:字典序排序+枚舉。輸出具有一定的迷惑性,千萬要注意它說的如果輸出有多種,任意輸出一種就行。
AC代碼:
#include#include #include #include #include #include #include #include #include #include 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); #endif int 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道。