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.}
浙公网安备 33010602011771号