为什么下面两种输入会有超时 方法一:(不会超时)
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
int main()
{
int a=0,b=0,c=0;
char d[259];
scanf("%s",d);
bool af=false,bf=false,cf=false;
for(int i=0;i<strlen(d);i++)
{
char t=d[i];
if(t=='a')
{
af=true;
if(bf)
b=a;
if(cf)
c=a;
}
if(t=='b')
{
bf=true;
if(af)
a=b;
if(cf)
c=b;
}
if(t=='c')
{
cf=true;
if(af)
a=c;
if(bf)
b=c;
}
if(t>='0'&&t<='9')
{
if(af)
{
af=false;
a=t-'0';
}
if(bf)
{
bf=false;
b=t-'0';
}
if(cf)
{
cf=false;
c=t-'0';
}
}
if(t==';')
{
af=false;
bf=false;
cf=false;
}
}
printf("%d %d %d",a,b,c);
}
方法2:(一个字符一个字符的输入的时候有些测试点就会超时)
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
int main()
{
int a=0,b=0,c=0;
bool af=false,bf=false,cf=false;
while(true)
{
char t=getchar();
if(t=='\n')
break;
if(t=='a')
{
af=true;
if(bf)
b=a;
if(cf)
c=a;
}
if(t=='b')
{
bf=true;
if(af)
a=b;
if(cf)
c=b;
}
if(t=='c')
{
cf=true;
if(af)
a=c;
if(bf)
b=c;
}
if(t>='0'&&t<='9')
{
if(af)
{
af=false;
a=t-'0';
}
if(bf)
{
bf=false;
b=t-'0';
}
if(cf)
{
cf=false;
c=t-'0';
}
}
if(t==';')
{
af=false;
bf=false;
cf=false;
}
}
printf("%d %d %d",a,b,c);
}