借鉴柳婼
PAT_B1003题库地址
代码参考柳神,题目原文和链接如上
题目翻译【关键】
答案正确的条件是:必须同时满足两个条件,最后一个是递推【我是翻译君】
- 必须仅 == 只有P,A,T三种字符,并且三种字符必须都有。所以,xPATx,PT,Whatever都是NO。
- (nA)PAT(nA)正确,n表示A的个数,可以为0。例如:正确的有 PAT,APATA,AAPATAA;错误的有APAT,PATA。两边个数一致
- 一个递推关系:
- 如果 aPbTc 是正确的,那么 aPbATca 也是正确的。以此为标准(括号表示新的b和c),往下递推。
- 如果 aPbATca 是正确的,那么 aP(bA)AT(ca)a 也是正确的。此时,bA表示新的b,ca表示新的c
- 如果 aPbAATcaa 是正确的,那么 aP(bAA)AT(caa)a 也是正确的。
- …
- 那么 aPb(nA)Tc(na)是正确的
输入输出分析
xPATx,PT,Whatever显然不满足条件1和2,NO
PAT、AAPATAA显然满足条件1和2,YES
由条件12可得,初始状态满足:b=A,a=c否则不满足条件2
公式:aPb(nA)Tc(na),等价于aP(n+1)AT(n+1)a,n+1倍
也就是说P 和 T 之间A的个数,就是T右边和P左边A个数的比例
以下是一些废话和反推过程
那么PAAT、AAPAATAAAA、APAAATAA都可以通过公式 反推 得到初始字符串:
PAAT反推过程:aPb(nA)Tc(na)
因为a=0,b=A,所以n=1,所以c=0
初始字符串:PAT, YES
AAPAATAAAA反推过程:aPb(nA)Tc(na)
因为a=AA,b=A,所以n=1,所以c=AA
初始字符串:AAPATAA,YES
APAAATAA反推过程:aPb(nA)Tc(na)
因为a=A,b=A,所以n=2,所以c=0
初始字符串:APAT,NO