当前位置:编程学习 > C/C++ >>

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++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,