洛谷的 RMJ 总是 UKE,所以这一题是在 ATcoder 上做的,记录一,记录二。
思路一
首先字符串长度一定是 \(6\) 的倍数,然后判断是否只有 \(t\)、\(i\)、\(e\)、\(c\)、\(h\) 这五个字符,最后统计一下字符个数就行了。
代码(错误):
#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;
}
标签:输出,No,int,题解,ttpc2015,字符,include,size
From: https://www.cnblogs.com/zjh114/p/17606101.html