URAL1102

此题最佳算法是倒着做,正着做太麻烦,反例inputon,倒着做更好做一些,

01.#include <iostream>   
02.#include <string>   
03.using namespace std;  
04.int main ()  
05.{  
06.    int n;  
07.    cin>>n;  
08.    while(n)  
09.    {  
10.        string s;  
11.        cin>>s;  
12.        int flag = 1;  
13.        for(int i = (int)s.size()-1; flag&&i >=0 ; i--)  
14.        {  
15.            switch(s[i])  
16.            {  
17.            case 'e':  
18.            {  
19.                if(s[i-1]=='n'&&s[i-2]=='o')  
20.                {//cout<<"->"<<"one"<<endl;   
21.                    i-=2;  
22.                    break;  
23.                }  
24.                cout<<"NO"<<endl;  
25.                flag = 0;  
26.                break;  
27.            }  
28.            case 't':  
29.            {  
30.                if(s[i-1]=='u'&&s[i-2]=='o')  
31.                {//cout<<"->"<<"output"<<endl;   
32.                    i-=2;  
33.                    break;  
34.                }  
35.                if(s[i-1]=='u'&&s[i-2]=='p'&&s[i-3]=='t'&&s[i-4]=='u'&&s[i-5]=='o')  
36.                {//cout<<"->"<<"out"<<endl;   
37.                    i-=5;  
38.                    break;  
39.                }  
40.                if(s[i-1]=='u'&&s[i-2]=='p'&&s[i-3]=='n'&&s[i-4]=='i')  
41.                {//cout<<"->"<<"puton"<<endl;   
42.                    //cout<<"->"<<s<<endl;   
43.                    i-=4;//cout<<"puton"<<endl;   
44.                    break;  
45.                }  
46.                cout<<"NO"<<endl;  
47.                flag = 0;  
48.                break;  
49.            }  
50.  
51.  
52.            case 'n':  
53.            {  
54.                if(s[i-1]=='i')  
55.                {//cout<<"->"<<"input"<<endl;   
56.                    i-=1;  
57.                    break;  
58.                }  
59.                if(s[i-1]=='o'&&s[i-2]=='t'&&s[i-3]=='u'&&s[i-4]=='p')  
60.                {//cout<<"->"<<"in"<<endl;   
61.                    i-=4;  
62.                    break;  
63.                }  
64.                cout<<"NO"<<endl;  
65.                flag = 0;  
66.                break;  
67.            }  
68.            default:  
69.                cout<<"NO"<<endl;  
70.                flag = 0;  
71.                break;  
72.            }  
73.  
74.  
75.        }  
76.        if(flag)  
77.            cout<<"YES"<<endl;  
78.        n--;  
79.    }  
80.    return 0;  
81.}  


 

posted on 2012-08-21 10:23  Primo...  阅读(130)  评论(0)    收藏  举报