1003. 我要通过!(20)

1003. 我要通过!(20)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。

得到“答案正确”的条件是:

1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;
2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
3. 如果 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

提交代

优化前:

#include<stdio.h>
#include<string.h>
int main()
{
int c,len,q,i,j=0,countp,counta,countt,k,count1,count2,count3,m,n,coun;
char s[101];
scanf("%d",&c);
for(q=0;q<c;q++)
{
countp=0;
counta=0;
countt=0;
coun=0;
k=0;
j=0;
count1=0;
count2=0;
count3=0;
scanf("%s",s);
        //  gets(s);
len=strlen(s);


while(s[j]!='\0')
{
if(s[j]=='P')
{
countp++;
}
else if(s[j]=='A')
{
counta++;
}
 else if(s[j]=='T')
{
countt++;
}else
{
printf("NO\n");
coun++;
break;
// return 0;
 //  continue;
}
j++;
}
//保证PT出现一次A至少一次,无其他 ,然后验证其规律 
if(countp==1&&countt==1&&counta!=0&&coun==0)
{
while(s[k]!='\0')
         {
        if(s[k++]=='P')
      {
      m=k-1;
    }
    }
  k=0;
    while(s[k]!='\0')
       {
        if(s[k++]=='T')
      {
      n=k-1;
    }
       
  }
for(i=0;i<m;i++)
   {
    if(s[i]=='A')
    {
    count1++;
}
   
 }
  for(i=n+1;i<len;i++)
   {
    if(s[i]=='A')
    {
    count3++;
}
 }
 for(i=m+1;i<n;i++)
 {
  if(s[i]=='A')
  {
  count2++;
}
 }
  if(count1*count2==count3)
  {
printf("YES\n");
}else{
printf("NO\n");
}
}else
{
if(coun!=0)
{
continue;


}
printf("NO\n");
}

}
}


优化后:#include<stdio.h>
#include<string.h>
int main(){
    int n,i,j;
    int cntp=0,cntt=0;
    char s[101];
    char *p1,*p2;
    scanf("%d",&n);
    for(i=0;i<n;++i){
        scanf("%s",&s);
        int cntp=0,cntt=0,cnta=0,ispat=0;
        /* 对s进行遍历,记录PAT三个字母出现的次数,
        若出现其他字符直接结束测试 */ 
        for(j=0;s[j]!='\0';++j){
            if(s[j]=='P') ++cntp;
            else if(s[j]=='T') ++cntt;
            else if(s[j]=='A') ++cnta;
            else goto endtest;
        }
        /* 当P和T都只有1个,A至少1个时,
        计算是否符合规律 */ 


        if(cntp==1&&cntt==1&&cnta!=0){
            p1=strchr(s,'P');
            p2=strchr(s,'T');
            if((p1-s)*(p2-p1-1)==strlen(p2)-1){
                ispat=1;
            }
        }
        endtest:
        if(ispat) printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: POSIX是一个为了提高计算机系统互操作性而制定的一系列标准。POSIX 1003是在1988年由IEEE制定的一项标准,也被称为POSIX.1或UNIX标准。它包含了一系列操作系统接口的定义,如文件操作、进程管理、信号处理、线程管理等。POSIX 1003旨在使不同的UNIX系统之间具有更好的兼容性,以便软件可以在不同的UNIX系统上进行移植。 POSIX 1003的主要目标是为了提供一个通用的操作系统接口,不仅仅限于UNIX系统,也可以应用于其他类UNIX的操作系统。这样可以方便开发人员编写一次代码,就能在多个UNIX系统上运行,并且充分利用各个系统的功能和特性。 POSIX 1003规定了一系列C语言的API,开发人员可以使用这些API调用来实现各种操作系统相关的功能。这些API包括了文件I/O、进程管理、线程管理、信号处理等常见的操作系统功能。通过使用POSIX 1003,开发人员可以编写出更具可移植性的代码,从而减少了在不同UNIX系统上移植代码的工作量。 除了POSIX 1003之外,还有其他的POSIX标准,如POSIX 1003.1b(对于实时扩展)、POSIX 1003.1c(对于国际化扩展)等。这些标准在不断地发展和更新,以适应不断变化的计算机系统需求。虽然POSIX标准是为UNIX系统设计的,但很多非UNIX操作系统也在采用POSIX标准,以提供更好的兼容性和一致性。 总而言之,POSIX 1003是一个标准化的接口集合,旨在提高计算机系统的兼容性和可移植性。通过遵循POSIX 1003,开发人员可以更轻松地编写跨平台的应用程序,从而提高工作效率。 ### 回答2: POSIX (Portable Operating System Interface) 1003是一组操作系统接口标准,目的是为了提供操作系统内核与应用程序之间的标准接口。 POSIX 1003标准最初由IEEE (Institute of Electrical and Electronics Engineers) 开发,并于1988年发布。该标准的目的是为了提供可移植性,使得应用程序可以在不同的操作系统上运行,而无需进行大量的修改。POSIX 1003标准为开发者提供了一组系统调用、库函数和工具命令,以及用于描述系统行为的规范。 POSIX 1003标准涉及多个领域,包括文件系统、进程管理、线程、信号处理、网络通信等。通过采用POSIX 1003标准,开发者可以使用一致的API来访问这些功能,而不必考虑底层操作系统的差异。 举例来说,POSIX 1003的文件系统API定义了一组函数来操作文件和目录,如打开、读取、写入、关闭文件等。无论是在Windows系统还是在Linux系统,开发者可以使用相同的函数调用来实现这些操作。这样一来,开发者只需要编写一次代码,即可在不同的操作系统上运行,从而提高了代码的可移植性和开发效率。 此外,POSIX 1003还定义了一系列环境变量、系统错误码、管道机制等,进一步增强了系统间的统一性和互操作性。 综上所述,POSIX 1003是一种可以跨不同操作系统平台使用的标准接口。它提供了一致的API,促进了可移植性和代码的重用性,使开发者能够更轻松地开发和维护跨平台的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试小牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值