AT_ttpc2015_g 题解
洛谷的 RMJ 总是 UKE,所以这一题是在 ATcoder 上做的,记录一,记录二。
思路一
首先字符串长度一定是
代码(错误):
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
int t=0,i=0,e=0,c=0,h=0;
cin>>a;
if(a.size()%6!=0){
cout<<"No\n";
return 0;
}
for(int s=0;s<a.size();s++){
if(a[s]=='t') t++;
else if(a[s]=='i') i++;
else if(a[s]=='e') e++;
else if(a[s]=='c') c++;
else if(a[s]=='h') h++;
else{
cout<<"No\n";
return 0;
}
}
if(t==a.size()/6*2&&i==a.size()/6&&e==i&&c==e&&h==c) cout<<"Yes\n";
else cout<<"No\n";
return 0;
}
思路二
原因是因为少了判断字符的顺序,那么怎么判断字符的顺序呢?
-
如果
t 比i 少,输出No。 -
如果
t 比e 少(由于e 前面会有两个t 所以e 的个数要乘2 ),输出No。 -
如果
i 比e 少,输出No。 -
如果
e 比c 少,输出No。 -
如果
h 比c 少,输出No。 -
如果
t 比字符串titech的数量多并且i 比t 减去字符串titech的数量少,输出No。
代码:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
int t=0,i=0,e=0,c=0,h=0;
cin>>a;
if(a.size()%6!=0){
cout<<"No\n";
return 0;
}
for(int s=0;s<a.size();s++){
if(a[s]=='t') t++;
else if(a[s]=='i') i++;
else if(a[s]=='e') e++;
else if(a[s]=='c') c++;
else if(a[s]=='h') h++;
else{
cout<<"No\n";
return 0;
}
if(t<i||t<e*2||i<e||e<c||c<h||(t>a.size()/6&&i<t-a.size()/6)){
cout<<"No\n";
return 0;
}
}
if(t==a.size()/6*2&&i==a.size()/6&&e==i&&c==e&&h==c) cout<<"Yes\n";
else cout<<"No\n";
return 0;
}