@[xiaoxiaoxia](/user/677127)
帮您调了一下,得分[$\color{YELLOW}70$](https://www.luogu.com.cn/record/85064766)分。有$7\color{GREEN}AC$,但会有$3\color{BLACK}TLE$.
```
#include<bits/stdc++.h>
using namespace std;
char a[15];
char b[1000005];
int main()
{
fgets(a,sizeof(a),stdin);
fgets(b,sizeof(b),stdin);
for(int i=0;a[i]!=10,i<strlen(a);i++)
{
if(a[i]>='A'&&a[i]<='Z')
{
a[i]+=32;
}
}
for(int i=0;b[i]!=10,i<strlen(b);i++)
{
if(b[i]>='A'&&b[i]<='Z')
{
b[i]+=32;
}
}
int flag=-1;
int sum=0;
for(int i=0;b[i]!=10,i<strlen(b);i++)
{
if(i==0||b[i-1]==' ')
{
int j;
for(j=0;a[j]!=10,j<strlen(a);j++)
{
if(a[j]!=b[i+j])
{
break;
}
}
if(a[j]==10&&(b[i+j]==' '||b[i+j]==10))
{
sum++;
if(sum==1)
{
flag=i;
}
}
}
}
if(sum==0)
{
cout<<-1;
}
else
{
cout<<sum<<" "<<flag<<endl;
}
return 0;
}
```
错误原因待会说,不过您这种做法太耗时了。最坏情况下要运行$10^{12}$次,建议换种思路重新做题。
by coldy_rainy @ 2022-08-25 13:29:05
@[xiaoxiaoxia](/user/677127)
**【错误原因】:**
$\color{PURPLE}RE$的原因是因为**数组越界**:
举个例子:
---
`for(int i=0;a[i]!=10;i++)`
在这串代码中,当$i$一直枚举,到$a$字符数组边缘(即`i>strlen(a)`)时。因为`a[strlen(a)+1]`为**空**。所以该循环**迟迟没有退出**(这里的`a`**无空格**)。于是就一直这么循环下去,直到`i>15`($15$为`a`字符数组的**最大长度**)。一超出来,**字符数组越界**,于是很不幸的,$\color{PURPLE}RE$了。
---
所以,在每个循环条件中,像我那么搞,都应该加上是否大于字符串长度的判断,以防超范围$\color{PURPLE}RE$掉。
出于$\bold{TLE}$的部分,请您换种思路实现本题。
最后,祝您在$\bold{OI}$路中进步。
谢谢您的观看。
by coldy_rainy @ 2022-08-25 13:39:01
多谢
by xiaoxiaoxia @ 2022-08-25 13:51:02
@[coldy_rainy](/user/526755)
找了好多终于知道re的原因了,太感谢了,大佬(膜拜)
by yyyyyyy777 @ 2023-11-08 01:12:10