PAT乙级1003. 我要通过!(20)

 

条件:

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\n");
            else printf("NO\n");
        }
  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分。

有没有大佬能告诉我为什么。

posted @ 2017-09-15 13:25  水草精  阅读(235)  评论(0编辑  收藏  举报