• PAT之我要通过


    题目描述

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

    出“答案正确”,否则输出“答案错误”。



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



    1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;

    2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;

    3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 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


    在这题目本身上折腾了好久,初读时我相信好多人和我一样一头雾水。细细琢磨原来是数学归纳法的思想,分析如下图:


    有了这层关系就明朗许多了,下面就是更具输入的情况进行判断了,不要漏了某种情形基本上就能AC了,我的复杂度O(n²) 。改天想到简单的再来修改。
     1 // 代码有点多 用c写了
     2 #include <stdio.h>
     3 #include <stdlib.h>
     4 #include <string.h>
     5 int main()
     6 {
     7     int n;
     8     scanf("%d",&n);
     9     char (*input)[101] = (char (*)[101])malloc(n*101*sizeof(char));
    10     int i;
    11     for(i=0;i<n;++i)
    12         scanf("%s",input[i]);
    13     bool isPdiscover,isTdisCover,flag;
    14     int aLen,bLen,cLen;
    15     for(i=0;i<n;++i)
    16     {
    17         int j;
    18         isPdiscover = false;
    19         isTdisCover = false;
    20         flag = true;
    21         aLen = bLen = cLen = 0;
    22         for(j=0;input[i][j] != 0;++j)
    23         {
    24             if(input[i][j] == 'P')
    25             {
    26                 if(isPdiscover)
    27                 {
    28                     flag = false;
    29                     break;
    30                 }
    31                 else
    32                 {
    33                     isPdiscover = true;
    34                     aLen = j - aLen;
    35                 }
    36             }
    37             else if(input[i][j] == 'T')
    38             {
    39                 if(isTdisCover)
    40                 {
    41                     flag = false;
    42                     break;
    43                 }
    44                 else
    45                 {
    46                     isTdisCover = true;
    47                     bLen = j - aLen -1;
    48                 }
    49             }
    50             else if(input[i][j] != 'A')
    51             {
    52                 flag = false;
    53                 break;
    54             }
    55         }
    56         if(!flag)
    57             printf("NO");
    58         else if(!isPdiscover || !isTdisCover )
    59             printf("NO");
    60         else if(bLen < 1)
    61             printf("NO");
    62         else if(aLen == 0 && bLen >0 && bLen+2 == j)
    63             printf("YES");
    64         else {
    65             cLen = j - 2- aLen - bLen;
    66             if(cLen == aLen * bLen)
    67                 printf("YES");
    68             else
    69                 printf("NO");
    70         }
    71 
    72         if(i != n-1)
    73             printf("
    ");
    74     }
    75     free(input);
    76 }
  • 相关阅读:
    js简单的双向绑定
    angular的$scope
    angular一些冷门的用法
    堆栈
    angular一些有启发的博客
    160830、如何运用最新的技术提升网页速度和性能
    160829、Java加解密与数字签名
    160826、浏览器渲染页面过程描述,DOM编程技巧以及重排和重绘
    160825、互联网架构,如何进行容量设计?
    160824、ionic添加地图站点
  • 原文地址:https://www.cnblogs.com/ittinybird/p/4531758.html
Copyright © 2020-2023  润新知