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.}