PAT B1003 我要通过! (20分)

在这里插入图片描述

#include <cstdio>
#include <iostream>
#include <string>

using namespace std;

int main(){
    
    
	int n;
	scanf("%d", &n);
	
	string str;
	int left, mid, right;
	int flag;
	for(int i=0; i<n; i++){
    
    
		flag = 0;
		cin >> str;
		for(int j=0; j<str.length(); j++){
    
    
			if(str[j]!='P' && str[j]!='A' && str[j]!='T'){
    
    
				printf("NO\n");
				flag = 1;
				break;
			}
		}
		if(flag){
    
    
			continue;
		}
		
		left = str.find("P");
		mid = str.find("T") - str.find("P") - 1;
		right = str.length() - str.find("T") - 1;
		
		if(mid == 1){
    
    
			if(left == right){
    
    
				printf("YES\n");
			}else{
    
    
				printf("NO\n");
			}
		}else if(mid == 0){
    
    
			printf("NO\n");
		}else{
    
    
			while(mid != 1){
    
    
				mid--;
				right -= left;
			}
			if(left == right){
    
    
				printf("YES\n");
			}else{
    
    
				printf("NO\n");
			}
		}
	}
	
	return 0;
} 

越来越觉得PAT的题目模糊不清,也可能是我想的太多了,这题看了足足有十分钟才弄懂题目的意思。
算是一个简单模拟题,首先遍历一次字符串,如果发现有不是PAT这三个字母的字符则直接输出NO,开始下一次输入。
根据题目可以发现规律,如果PT中间只有一个A,则P的左边和T的右边的A数量要相等才为正确,如果PT中间没有A,则错误。
比较麻烦的是第三个条件,当PT中间A的数量大于一个时,此时可以根据题目条件向前递推,一直到PT中间A数量为一个的时候,然后判断此时是否正确。

猜你喜欢

转载自blog.csdn.net/weixin_45964844/article/details/112169198