40分求助

P1308 [NOIP2011 普及组] 统计单词数

代码自己改了一下,现在有3个点超时 ```cpp #include <string.h> #include <iostream> using namespace std; void ToLower(char *str) { for (int i = 0; i < strlen(str); i++) if (str[i] >= 'A' && str[i] <= 'Z') str[i] += 32; // 'a' - 'A' equals to 32 } void Trim(char *str) { for (int i = 0; i < strlen(str); i++) if (str[i] == '\n') str[i] = '\0'; } int main() { char str1[128]; char str2[1024000]; // fgets(str1, 128, stdin); // fgets(str2, 10240, stdin); cin.getline(str1, 128); cin.getline(str2, 1024000); ToLower(str1); ToLower(str2); Trim(str1); Trim(str2); char prev = ' '; int first = 0; int count = 0; bool firstSet = false; int str1Len = strlen(str1); int str2Len = strlen(str2); for (int i = 0; i < str2Len; i++) { if (prev == ' ') { bool match = true; for (int j = 0; j < str1Len; j++) { char cur_str1 = str1[j]; int i2 = i + j; if (i2 >= str2Len) { match = false; break; } match &= str2[i2] == str1[j]; if (!match) break; } if (i + str1Len < str2Len) if (match && str2[i + str1Len] != ' ') match = false; if (match) { if (!firstSet) { firstSet = true; first = i; } count++; } } prev = str2[i]; } if (!firstSet) // printf("-1\n"); cout << "-1" << endl; else // printf("%d %d\n", count, first); cout << count << " " << first << endl; } ```
by src_resources @ 2019-10-06 11:59:16


我也不会
by dmjdmj @ 2019-10-07 12:31:24


|