1003.我要通过!(20)

答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于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

 

这是今天我在pat上刷乙级题是遇到的一个让我苦手的一道题,无论如何都不能完美全对通过,后来在搜索引擎上搜了与这道题相关的一些资料,才发现我对这道题的理解就没有到位,比如说三个条件我的分析就是完全错误的,正确的分析应该是这样:首先根据条件1,字符串中只能有’P’、’A’、’T’三种字符,这是很好理解的,条件2也非常好理解,不再赘述,最主要的是条件3、这是我认为本题最关键的地方,正是因为我没有解读正确,才会解题出错,第三个条件需要用递归的思维去理解、比如说,如果aPbTc是正确,根据前两个条件,意味着b只能是A,否则,aPbTc是会出错的,而且,a=c,确立了b、a、c,就可一看后面的结论,aPAATca也是正确的,那么如果aPAATca是正确的,就可以推出aPAAATcaa是正确的,再往后以此类推,最后会发现一个规律,那就是:假设x1是a字符串中a的个数,x2是P与T之间字符串的个数,x3是T之后的A的个数,可以得到一个公式,那就是x3 = x2 * x1,条件2也适用于这条公式。弄清楚原理就可以开始写代码了,下面贴一下我写的代码:

#include  <iostream>
#include <string>
using namespace std;

int main()
{
    int n;
    cin >> n;
    getchar();
    string lines[10];
    string results[10];
    for (int i = 0; i < n;i++)
    {
        getline(cin, lines[i]);
    }

    for (int i = 0; i < n; i++)
    {
        int length = lines[i].length();
        int idxP = lines[i].find(‘P‘, 0);
        int idxT = lines[i].find(‘T‘, 0);
        //根据题意,把字符串中不包含‘P‘‘T‘以及P与T
        //相邻以及P在T之后的情况排除
        if(idxP == string::npos||idxT==string::npos||idxP+1>=idxT)
        {
            results[i] = "NO";
        }else
        {
            //把a,b,c从字符串中剥离开来
            string a(lines[i],0,idxP);
            string b(lines[i], idxP + 1, idxT - idxP - 1);
            string c(lines[i], idxT + 1,length-idxT-1);
            string temp = a + b + c;
            if (temp.find_first_not_of(‘A‘) != string::npos)
            {
                results[i] = "NO";
            }else
            {
                if(idxP*(idxT-idxP-1) == length-idxT-1)
                {
                    results[i] = "YES";
                }else
                {
                    results[i] = "NO";
                }
            }
        }
    }
    for (int i = 0; i < n;i++)
    {
        cout << results[i] << endl;
    }

    return 0;
}
 
 
 
 
时间: 2024-10-12 03:26:13

1003.我要通过!(20)的相关文章

DBUtils 笔记

一.DBUtils介绍  apache 什么是dbutils,它的作用 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作.可以少写代码. 1.对于数据表的读操作,他可以把结果转换成List,Array,Set等java集合,便于程序员操作: 2.对于数据表的写操作,也变得很简单(只需写sql语句) 3.可以使用数据源,使用JNDI,数据库连接池等技术来优化性能--重用已经构建好的数据库连接对象 二.DBUtils的三个核

Oracle数据库11g基于rehl6.5的配置与安装

REDHAT6.5安装oracle11.2.4 ORACLE11G R2官档网址: http://docs.oracle.com/cd/E11882_01/install.112/e24326/toc.htm#BHCGGJAB 一.操作系统 [[email protected] ~]# cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.5 (Santiago) [[email protected] ~]# unam

关于手机端视频嵌入的探索

最近一直在做移动端,而且现在与js,jq打交道的时间远超html,css,这让编程底子本就很薄的我倍感压力,但愿能一步步顺利的克服难关吧. 今天要在手机里插入视频,需要引入优酷或土豆的视频链接.最开始想到的是html5 的video标签,不过由于视频网站直接复制过来的url都是swf格式的,而这个格式video根本不支持.于是换回<object><embed>标签来写,放到手机页面~结果ios不支持flash的播放. 不过微信里分享的那些视频是怎么做的呢?于是找了一个链接,开始分析

poj 3254 状态压缩

Corn Fields Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15285   Accepted: 8033 Description Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12) square parcels. He wants to grow some yum

Eclipse环境下使用jdbc访问hive程序(hive-0.12.0 + hadoop-2.4.0集群)

一.Eclipse 新建Other->Map/Reduce Project工程 工程自动包含了相关hadoop的jar包, 另外还需分别导入以下hive和连接mysql的jar包: hive/lib/*.jar mysql-connector-java-5.1.24-bin.jar 二.启运HiveServer 命令:bin/hive --service hiveserver & 曾经执行多次这个命令没成功后,报错:Could not create ServerSocket on addre

大数据学习之linux(2)

1.history 查看历史命令 [[email protected] ~]# history 2 cat jepson.log |grep ruoze 3 cat jepson.log |grep "ruoze" 4 echo "www.ruodata.com">>jepson.log 5 cat jepson.log |grep "ruoze" 6 cat jepson.log |grep "ruo" 7 ca

TensorFlow指定GPU/CPU进行训练和输出devices信息

TensorFlow指定GPU/CPU进行训练和输出devices信息 1.在tensorflow代码中指定GPU/CPU进行训练 with tf.device('/gpu:0'): .... with tf.device('/gpu:1'): ... with tf.device('/cpu:0'): ... 2.输出devices的信息 在指定devices的时候往往不知道具体的设备信息,这时可用下面的代码查看对应的信息 进入Python环境 from tensorflow.python.c

u近一年很变态个v分

http://ypk.39.net/search/all?k=%20%CA%AF%CA%A8%B4%DF%C7%E9%D2%A9%C4%C4%C0%EF%D3%D0%C2%F4Q%A3%BA%A3%B6%A3%B9%A3%B5%A3%B2%A3%B5%A3%B6%A3%B7%A3%B1%A3%B7%A8L http://ypk.39.net/search/all?k=%A1%FD%CF%C9%D3%CE%B4%DF%C7%E9%D2%A9%C4%C4%C0%EF%D3%D0%C2%F4Q%A3%

C++&#183;PAT乙级1003. 我要通过!(17/20)

/* 1003. 我要通过!(20) "答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于PAT的"答案正确"大派送 -- 只要读入的字符串满足下列条件,系统就输出"答案正确",否则输出"答案错误". 得到"答案正确"的条件是: 1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符: 2. 任意形如 xPATx 的字符串都可以获得"答案正确",其中 x 或者是空字符串