程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> uva 10602 - Editor Nottoobad

uva 10602 - Editor Nottoobad

編輯:C++入門知識


題目意思:    有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; 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved