【HDU 1797】【水題】マッチ・サービング
実は問題はとても水で、最初はsscanfでやろうと思って、半日やりました.愚かになった.时间制限训练は正直にやりましょう...優雅ではない解法で作られています.のsscanfはまだ理解し続ける必要があります.前回のIPアドレスの問題もはっきりしていません.半期試験の後にしましょう...
#include "stdio.h"
#include "string.h"
char s[100005];
int f1(int n)
{
for (int i = 0; i < n; ++i)
{
if(s[i]!='a')
return 0;
}
return 1;
}
int f2(int n,int m)
{
// printf("aa
");
if(s[n]=='d')
{
// printf("a
");
for (int i = n+1; i < m; ++i)
{
if(s[i]!='d')
return 0;
}
return 1;
}
else if(s[n]=='b')
{
// printf("b
");
if(s[n+1]=='d')
{
for (int i = n+1; i < m; ++i)
{
if(s[i]!='d')
return 0;
}
return 1;
}
else if(s[n+1]!='h')
return 1;
else
return 0;
}
return 0;
}
int f3(int n,int m)
{
for (int i = n; i < m; ++i)
{
if(s[i]!='f' && s[i]!='k')
return 0;
}
return 1;
}
int main(int argc, char const *argv[])
{
int num;
char a1[]="ba";
scanf("%d",&num);
getchar();
while(num--)
{
memset(s,0,sizeof(s));
scanf("%s",s);
getchar();
char *p1=strstr(s,a1);
char *p2=strchr(s,'h');
if(p2==NULL || p1==NULL)
{
printf("NO
");
continue;
}
int flag1=p1-s;
int flag2=p2-s;
if(flag2 && flag1)
{
//printf("1
");
if(f1(flag1)==0)
{
printf("NO
");
continue;
}
//printf("2
");
if(f2(flag1+2,flag2)==0 && flag2!=flag1+2)
{
printf("NO
");
continue;
}
// printf("3
");
if(f3(flag2+1,strlen(s))==0)
{
printf("NO
");
continue;
}
printf("YES
");
}
else
printf("NO
");
}
return 0;
}