Aeon4120 2019-10-05 11:11 采纳率: 0%
浏览 501

PAT 乙级 1003 我要通过,卡在第 0 测试点了。麻烦帮看一下

图片说明

下面是我的代码。想不到什么测试用例了。

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[]) {
    int num = 0,i = 0,j = 0;
    int result[10]={0};
    int flag = 1;
    int length=0;
    scanf("%d",&num);

    for (i = 0; i < num; i++){
        char s[101];
        scanf("%s",s);
        int cnt_P=0,cnt_T=0; //P、T 的个数
        int pos_P=-1,pos_T=-1; //P、T的位置

        length = (int)strlen(s);

        for(j=0;j<length;j++){
            if(s[j]=='P'){
                pos_P = j;
                cnt_P++;
            }
            else if(s[j]=='T'){
                pos_T=j;
                cnt_T++;
            }
            else if(s[j]!='A'){
                flag=0;
                break;
            }

            if(flag && cnt_P == 1 && cnt_T == 1 ){
                int l_A = 0, c_A = 0, r_A = 0;  //左中右 A 的个数
                l_A = pos_P;
                c_A = pos_T - pos_P - 1;
                r_A = length - pos_T - 1;
                if (c_A > 0 && l_A * c_A == r_A) {
                    result[i]=1;
                }
            }
        }
    }
    for (i=0;i<num;i++) {
        if(result[i]==1){
            printf("YES\n");
        }
        else{
            printf("NO\n");
        }
    }
    return 0;
}

  • 写回答

3条回答 默认 最新

  • JonathanYan 2019-10-05 13:42
    关注

    试试AAPAATAA这个情况

    if (c_A > 0 && l_A * c_A == r_A)
    //改成
    if (c_A > 0 && l_A * (c_A-1) >= r_A)
    

    aPbTc==>aPbATca的意思是PT之间至少有一个A,且每多一个A右边就加一次串a。
    所以计算的时候中间A的数量要减一,并改成大于等于,因为还有串c。

    这个链接和你的代码基本一致,我之前也是想错了,你写的没问题。不过我也不清楚到底是哪里出了问题,你再试试吧。

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器