AT_ttpc2015_g 题解

发布时间 2023-08-04 15:43:10作者: zhuangjihong

洛谷的 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;
}

思路二

原因是因为少了判断字符的顺序,那么怎么判断字符的顺序呢?

  1. 如果 \(t\)\(i\) 少,输出 No

  2. 如果 \(t\)\(e\) 少(由于 \(e\) 前面会有两个 \(t\) 所以 \(e\) 的个数要乘 \(2\)),输出 No

  3. 如果 \(i\)\(e\) 少,输出 No

  4. 如果 \(e\)\(c\) 少,输出 No

  5. 如果 \(h\)\(c\) 少,输出 No

  6. 如果 \(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;
}