条件:
1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。
题目很长一半都是废话,写一下总结分析。
由条件2可得,PAT、APATA、AAPATAA、AAAPATAAA……都对。
结合上一条看条件3可得,
1.如果PAT正确,那么PAAT也正确;如果PAAT正确,那么PAAAT也正确;……以此类推。
2.如果APATA正确,那么APAATAA也正确;如果APAATAA正确,那么APAAATAAA也正确;……以此类推。
3.如果AAPATAA正确,那么AAPAATAAAA也正确;……以此类推。
……
以此类推。
得出规律:A(…na…)A P A(…nb…)A T A(…nc…)A
只要满足条件na*nb=nc就正确。
#include <stdio.h> int main() { int i=0,n,j; int YN=1; //NO=1;YES=0; int p1=0,t1=0;//pt的位置 int p2=0,t2=0;//pt的次数 scanf("%d",&n); for(j=0;j<n;j++) { //number p2=0;t2=0; YN=0; int flag1=0,flag=0; char a[128]; scanf("%s",&a); printf("%s",a);// for(i=0;i<strlen(a);i++){ if(a[i]=='P'){//记录P的位置和次数 p1=i; p2++; } if(a[i]=='T'){//记录T的位置和次数 t1=i; t2++; } if(a[i]=='A'||a[i]=='P'||a[i]=='T') flag1++;//条件1 } if(flag1==strlen(a)) flag++; //System.out.println(flag); //System.out.println(aa.length+" "+p1+" "+p2+" "+t1+" "+t2); if(p1*(t1-p1-1)==(strlen(a)-1-t1)) flag++;//na*nb=nc //System.out.println(flag); if(p2==1&&t2==1) flag++;//pt only one if((t1-p1)>=2) flag++; //print if(flag==4) printf("YES "); else printf("NO "); } return 0; }
疑问:
以上c代码完全通过。
而我刚开始是用java写的。
import java.util.Scanner; public class Main { public static void main(String[] args) { int i=0,n,j; int YN=1; int p1=0,t1=0; int p2=0,t2=0; Scanner input =new Scanner(System.in); n=input.nextInt(); input.nextLine(); for(j=0;j<n;j++) { String arr=input.nextLine(); p2=0;t2=0; YN=0; int flag1=0,flag=0; char[] aa=arr.toCharArray(); for(i=0;i<aa.length;i++){ if(aa[i]=='P'){ p1=i; p2++; } if(aa[i]=='T'){ t1=i; t2++; } if(aa[i]=='A'||aa[i]=='P'||aa[i]=='T') flag1++; } if(flag1==aa.length) flag++; if(p1*(t1-p1-1)==(aa.length-1-t1)) flag++; if(p2==1&&t2==1) flag++; if((t1-p1)>=2) flag++; if(flag==4) System.out.println("YES"); else System.out.println("NO"); } } }
得到了0分。
有没有大佬能告诉我为什么。