同样的思路为啥他全过而我有三个TLE QAQ
查看原帖
同样的思路为啥他全过而我有三个TLE QAQ
790685
bluetored楼主2022/10/6 22:06

这是满分代码

#include <stdio.h>

#define MAX_LINE 1000001
#define val(a) (a<'a' ? (a-'A'+'a') : a)

int main()
{
    // declaration
    int i=0, j, count=0, first=-1;
    char c, w[11], s[MAX_LINE];

    // input
    scanf("%s", w);
    c = getchar();
    while((c = getchar()) != EOF && i < MAX_LINE){  
        if(c == '\n') break;
        s[i++] = c;
    } s[i] = '\0';

    // calculate
    for(i=0,j=0; s[i]!='\0'; ++i){
        if((i==0 || s[i-1]==' ' || j) && val(s[i])==val(w[j]) && ++j>-1){
            if(w[j]=='\0' && (s[i+1]=='\0' || s[i+1]==' ')){
                if(first==-1) first = i+1-j;
                count++;
            }
        }else j=0;
    }

    // output
    if(count==0) printf("-1\n");
    else printf("%d %d\n", count, first);
    return 0;
}

这是我的代码

#include <stdio.h>
#include <string.h>
int main  ()
{
	int first =-1;
	char c;
	char word[11];
	char are[1000001];
	int cnt=0;
	int i,j;
	gets (word);
	gets (are);
		for (i=0;i<strlen(word);i++){
		if(word[i]>='A'&&word[i]<='Z'){
			word[i]+=32;
		}
	}
	for (int i=0;i<strlen(are);i++){
		if(are[i]>='A'&&are[i]<='Z'){
			are[i]+=32;
		}
	}
	for (i=0,j=0;i<1000001;i++)
	{
		if ((i==0||are[i-1]==' '||j)&&are[i]==word[j++])
		{
			if(word[j]=='\0'&&(are[i+1]==' '||are[i+1]=='\0'))
			
		{
		if (first==-1) first=i+1-j;
			cnt++;
		}
		}
		else j=0;
	}
	if (cnt==0) printf ("-1\n");
	else printf ("%d %d",cnt,first);
	return 0;
}
2022/10/6 22:06
加载中...