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