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

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

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

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

输入格式:

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

输出格式:

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

输入样例:

8
PAT
PAAT
AAPATAA
AAPAATAAAA
xPATx
PT
Whatever
APAAATAA

输出样例:

YES
YES
YES
YES
NO
NO
NO
NO
 using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks; namespace ConsoleApp5
{
class Program
{
static void Main(string[] args)
{
/*字符串中只能含有PAT,1个P,1个T,多个A,且P一定在T前,PT直接至少一个A
* xPATx是正确的,(x为空串或者A)
* 条件3基于条件2,若aPbTc is right,那么aPAbTca 也是right
* 假设A(n),B(n),C(n),为n次递归后含有A的个数
* 基于条件2
* 根据条件得A(1)=C(1),B(1)=1
* 根据条件3
* A(n)=A(1),B(n)=B(n-1)+1,C(n)=C(n-1)+A(1)
* 解的
* A(n)=A(1)
* B(n)=B(1)+(n-1)=1+n-1=n
* C(n)=C(1)+(n-1)*A(1)=n*A(1)
* =>A(n)*B(n)=C(n)
*/ int count = ;
//输入一个数值,表示要测试多少个用例
count = Convert.ToInt32(Console.ReadLine());
//存放输入的用例
string[] strIn = new string[count];
//存放YES or NO
string[] strOut = new string[count];
//输入用例并存放在strIn数组中
for (int i = ; i < count; i++)
{
strIn[i] = Console.ReadLine();
} //对用例进行判断
for (int i = ; i < count; i++)
{
//获取用例中"P","T"的个数
int pnumber = Regex.Matches(strIn[i], "P").Count;
int tnumber = Regex.Matches(strIn[i], "T").Count;
//获取用例中"P""T"的下标
int indexP = strIn[i].IndexOf("P");
int indexT = strIn[i].IndexOf("T");
//判断用例是否只含有PAT三种字符
for (int j = ; j < strIn[i].Length; j++)
{
if (strIn[i][j]!='A'&& strIn[i][j] != 'P' && strIn[i][j] != 'T' )
{
strOut[i] = "NO";
}
//筛选出只含有PAT字符的字符串
else
{
//筛选出P,T个数只为1的字符串
if (pnumber == && tnumber == )
{
//P在A前面
if (indexP < indexT)
{
//获取lengtha,lengthb,lengthc,表示A(n),B(n),C(n)
int lengtha, lengthb, lengthc;
string a, b, c;
a = strIn[i].Substring(, indexP + );
lengtha = Regex.Matches(a, "A").Count; b = strIn[i].Substring(indexP + , indexT - indexP - );
lengthb = Regex.Matches(b, "A").Count; c = strIn[i].Substring(indexT + );
lengthc = Regex.Matches(c, "A").Count;
//排除PT直接没有A的字符串
if (lengthb==)
{
strOut[i] = "NO";
break;
;
}
//满足条件A(n)*B(n)=C(n)
if (lengtha * lengthb == lengthc)
{
strOut[i] = "YES";
}
else
{ strOut[i] = "NO";
} }
else
{ strOut[i] = "NO";
} } else
{
strOut[i] = "NO";
}
}
} }
//输出答案
for (int i = ; i < count; i++)
{
Console.WriteLine(strOut[i]);
} Console.ReadKey();
}
}
}

PAT 1003.我要通过1的更多相关文章

  1. PAT 1003我要通过!

    PAT 1003 我要通过! 答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于 PAT 的"答案正确"大派送 -- 只要读入的字符串满足下列条件,系统就输出&qu ...

  2. PAT 1003 我要通过!(20)(代码+思路)

    1003 我要通过!(20)(20 分)提问 "答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于PAT的"答案正确"大派送 -- 只要读入的字符串满足下 ...

  3. 迪杰斯特拉算法——PAT 1003

    本文主要是将我对于我对于迪杰斯特拉算法的理解写出来,同时通过例题来希望能够加深对于算法的理解,其中有错误的地方希望大家指正. 迪杰斯特拉算法 我将这个算法理解成一个局部到整体的算法,这个方法确实越研究 ...

  4. PAT 1003. 我要通过!(20) JAVA

    参考http://blog.csdn.net/bin8632/article/details/50216297 答案正确"是自动判题系统给出的最令人欢喜的回复.本题属于PAT的"答 ...

  5. PAT 1003. 我要通过!(20)

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

  6. PAT 1003

    1003. Emergency (25) As an emergency rescue team leader of a city, you are given a special map of yo ...

  7. PAT 1003. Emergency (25)

    1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...

  8. 浙大 pat 1003 题解

    1003. Emergency (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...

  9. PAT 1003. Emergency (25) dij+增加点权数组和最短路径个数数组

    1003. Emergency (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue As an emerg ...

  10. PAT 1003 我要通过!

    https://pintia.cn/problem-sets/994805260223102976/problems/994805323154440192 “答案正确”是自动判题系统给出的最令人欢喜的 ...

随机推荐

  1. Python 面向对象(上)

    一. 什么是面向对象? 1. 在了解面向对象之前,首先我们需要知道两个概念:(1)什么是函数?函数是对功能或动作的一种封装.函数的语法结构如下: def func(arg1): '''函数的内部有函数 ...

  2. 20190521 - macOS 中显示隐藏文件的快捷键

    macOS 中显示隐藏文件,以前总是借助于命令行或第三方软件,其实有一个快捷键: shift + cmmand + .

  3. CodeForces 1251B --- Binary Palindromes

    [CodeForces 1251B --- Binary Palindromes] Description A palindrome is a string t which reads the sam ...

  4. nginx+gunicorn拓扑

    加装Nginx是否有必要 Nginx作为代理服务器,监听来自外部的80端口的请求:而Gunicorn负责监听本地机8000端口的请求.Nginx会把来自外部的请求转发给Gunicorn处理,接收到响应 ...

  5. 一、linux基础命令

    一. 常用系统工作命令 1.echo 命令 ​ echo命令用于在终端输出字符串或者变量提取后的值 ​ echo $SHELL 2.date命令 ​ date命令用于显示及设置系统的时间或者日期 参数 ...

  6. 【VS开发】OpenCV2:Mat属性type,depth,step

    OpenCV2:Mat属性type,depth,step 在OpenCV2中Mat类无疑使占据着核心地位的,前段时间初学OpenCV2时对Mat类有了个初步的了解,见OpenCV2:Mat初学.这几天 ...

  7. IE11报错:[vuex] vuex requires a Promise polyfill in this browser的问题解决

    昨天其他同事反馈IE浏览器无法打开线上的应用,查看了一下,发现控制台报以下错误: 发现和vuex有关系,去其官网查看了一下文档,发现关于IE浏览器的Promise的问题: 在vue-cli(webpa ...

  8. kubespray 修改配置

    1.安装前的修改配置 # [root@slave1 kubespray]# vim inventory/local/group_vars/k8s-cluster.yml kube_network_pl ...

  9. 利用requests提交相同名称数据的处理方法

    #字典键不能重复 data={ boardid' : boardid, 'divids[ ]' : '0' , 'divids[ ]' : '1' , 'divids[ ]' : '2' , } #这 ...

  10. Git 入门:概念、原理、使用

    出处: git入门:概念.原理.使用 git和Github 概念 Git --- 版本控制工具(命令). git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.git ...