当前位置: 代码迷 >> 综合 >> PAT (Basic Level) Practice (中文) 1003
  详细解决方案

PAT (Basic Level) Practice (中文) 1003

热度:19   发布时间:2023-11-26 22:18:24.0

1003 我要通过!

“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”

得到**“答案正确”**的条件是:

  1. 字符串中必须仅有PAT这三种字符,不可以包含其它字符;
  2. 任意形如xPATx的字符串都可以获得**“答案正确”**,其中 x或者是空字符串,或者是仅由字母A组成的字符串;
  3. 如果 aPbTc是正确的,那么aPbATca也是正确的,其中abc均或者是空字符串,或者是仅由字母A组成的字符串。

现在就请你为 PAT 写一个自动裁判程序,判定哪些字符串是可以获得**“答案正确”**的。

输入格式:

每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n (<10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。

输出格式:

每个字符串的检测结果占一行,如果该字符串可以获得**“答案正确”**,则输出 YES,否则输出 NO。

输入样例:

8
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA

输出样例:

YES
YES
YES
YES
NO
NO
NO
NO

分析,三个条件要满足
在一中,只有PAT三个字符,在二中x表示满足 空格 或者 字符串,在三中表示满足前条件后条件也满足。

由二三得到,APATA => APAATAA
再推出 APAATAA => ATPAAATAAA
以此类推 …

得出
a*b = c

即可解决

#include<stdio.h>
#include<string.h>
int main()
{
    char a[101];int n,t,b[10] = {
    0,0,0,0,0,0,0,0,0,0};int s1 = 0,s2 = 0,s3 = 0;int count_P_T;int sign1,sign2;scanf("%d",&t);for(int q = 0;q < t;q++){
    scanf("%s",a);n = strlen(a);s1 = 0;s2 = 0;for(int i = 0;i < n;i++){
    if(a[i] == 'P'){
    sign1 = i;s1++;}}for(int i = 0;i < n;i++){
    if(a[i] == 'T'){
    sign2 = i;s2++;}}if(sign1 >= sign2){
    continue;}if(a[sign1+1] == 'A' && sign1+2 == sign2){
    if(sign1 == n-sign2-1 && sign1 == 0){
    if(s1 == 1 || s2 == 1){
    b[q] = 1;continue;}}if(sign1 + sign2 == n-1 && sign1 != 0){
    int flag  = 0;for(int i = 0;i < sign1;i++){
    if(a[i] != 'A'){
    flag = 1;break;}}for(int i = sign2+1;i < n;i++){
    if(a[i] != 'A'){
    flag = 1;break;}}if(flag == 0){
    if(s1 == 1 || s2 == 1){
    b[q] = 1;continue;}}}}else if(sign1+1 < sign2){
    count_P_T = sign2 - sign1 - 1;if(n-sign2-1 == count_P_T*(sign1)){
    int flag = 0;for(int i = 0;i < sign1;i++){
    if(a[i] != 'A'){
    flag = 1;break;}}for(int i = sign2+1;i < n;i++){
    if(a[i] != 'A'){
    flag = 1;break;}}if(flag == 0){
    if(s1 == 1 || s2 == 1){
    b[q] = 1;continue;}}}}}for(int i = 0;i < t;i++){
    if(b[i] == 0){
    printf("NO\n");}elseprintf("YES\n");}return 0;
}
  相关解决方案