PAT Basic Level 1003 我要通过! (20 分)
题目链接:
https://pintia.cn/problem-sets/994805260223102976/problems/994805323154440192
考点:
分析:
任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
那么正确的有这些:
PAT
APATA
AAPATAA
AAAPATAAA
...不说了,就是中间一个A左右加上等量的A(不加也行)都是正确的。
如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。
拿上面的那几个正确的举例子,那么正确的有这些:
PAT —— 对于 aPbTc 来说ac是空,b是A。所以 PAAT 是正确的。同理PAAAAAT中间加多少个A都是正确哒~
APATA —— 对于aPbTc来说,abc都是A。所以 APAATAA 是正确的。再类推一下,那么 APAAATAAA 是正确的。
AAPATAA —— 对于aPbTc来说,a和c是AA,b是A。所以AAPAATAAAA是正确的,再类推一下,AAPAAATAAAAAA 是正确的~
所以说规律就是,可以在P和T中间加A并且在T后面加A,要求必须是,中间加上一个A,末尾就得加上几倍的(P前面A的那个字符串)。换句话说就是,中间的A的个数如果是3,那么末尾的A的个数就得是开头A的个数的3倍。很巧,当中间A为一个的时候,末尾和开头A的个数必须相等正好是第二条的要求~~~
所以一句话总结字符串的要求:只能有一个P一个T,中间末尾和开头可以随便插入A。但是必须满足开头的A的个数 * 中间的A的个数 = 结尾的A的个数,而且P和T之间不能没有A~
(原文:https://blog.csdn.net/liuchuo/article/details/51994881 )
AC代码:
[code]#include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #include <cstdlib> #include <cstring> using namespace std; int main() { int n; scanf("%d",&n); while(n--){ int lp,np=0,lt,nt=0,other=0; char str[110]; scanf("%s",str); for(int i=0;i<strlen(str);i++){ if(str[i]=='P'){ lp=i;//字母P的位置 np++; } else if(str[i]=='T'){ lt=i;//字母T的位置 nt++; } else if(str[i]!='A'){ other++; } } int x=lp,y=lt-lp-1,z=strlen(str)-lt-1;//分别计算各个区域内A的个数 if((np!=1)||(nt!=1)||(other!=0)||(lt-lp)<=1){//P与T中间至少有一个A所以lt-lp<=1,而不是(lt-lp)!=2 printf("NO\n"); continue; } if(x*y==z){ printf("YES\n"); } else printf("NO\n"); } }
- PAT (Basic Level) Practise (中文)1003. 我要通过!(20)
- PAT (Basic Level) Practise (中文)1003. 我要通过!(20)
- PAT (Basic Level) Practise (中文)1003. 我要通过!(20)
- PAT (Basic Level) Practise (中文)1003. 我要通过!(20)
- PAT (Basic Level) Practise (中文)- 1003. 我要通过!(20)
- PAT (Basic Level) Practise (中文) 1003.我要通过!(20)
- PAT Basic Level 1003. 我要通过!(20)
- PAT BASIC LEVEL 1003. 我要通过!(20)
- PAT (Basic Level) Practise (中文)1003. 我要通过!(20) C语言
- PAT Basic Level 1003:我要通过!
- PAT basic 1003. 我要通过!(20)
- PATBasic——1003. 我要通过!(20)
- PAT Basic 1003. 我要通过!(20)(C语言实现)
- 我要通过!(20) PAT(Basic Level) Practise NO.1003
- PAT(basic level) 1003 我要通过
- PAT乙级真题及训练集 PAT (Basic Level) Practise (中文)1003. 我要通过!
- PAT (Basic Level) Practise (中文) 1003.我要通过
- PAT(Basic Level)_1003_我要通过!
- Pat(Basic Level)Practice--1003(我要通过)
- PAT (Basic Level) Practise 1003. 我要通过!