【HDU 1797】【水題】マッチ・サービング

2055 ワード

実は問題はとても水で、最初は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; }