1003 我要通过
我要通过
题目描述:
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。
得到“答案正确”的条件是:
- 字符串中必须仅有
P、A、T这三种字符,不可以包含其它字符; - 任意形如
xPATx的字符串都可以获得“答案正确”,其中x或者是空字符串,或者是仅由字母A组成的字符串; - 如果
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
思路:
先读懂题目,只能有P A T三个字母,其他字母不行
3、如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字母 A 组成的字符串。最重要是第三个条件,设P前面的A的数量为counta,P和T中间A的数量为countb,T之后的A的数量为countc,找规律就可以知道countc=counta*countb,这个规律知道之后就好写了
代码:
package main
import "fmt"
func main() {
var n , i ,j , counta ,countb,countc,flag int
var s string
fmt.Scanf("%d",&n)
for i<n{
fmt.Scanf("%s",&s)
//判断有无其他字符
for k:=0;k<len(s);k++{
if s[k]!='P'&&s[k]!='T'&&s[k]!='A'{
i++
flag=1
break
}
}
if flag==1{
flag=0
fmt.Printf("NO\n")
continue
}
for j<len(s)&&s[j]!='P'{
counta++
j++
}
j++
for j<len(s)&&s[j]!='T'{
countb++
j++
}
countc=len(s)-countb-counta-2
//println(counta ,countb ,countc)
if countb==0||counta*countb!=countc{
fmt.Printf("NO\n")
}else {
fmt.Printf("YES\n")
}
//清零
countc=0
counta=0
countb=0
j=0
i++
}
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!