oj输出超限?
对于输出超限,产生这种问题的原因有很多,下面用这个例子来说明一下输出超限的原因
int main()
{
int n,m,left,right;
while(~scanf("%d %d",&n,&m))
{
for(int i=0;i<n;i++)
{
scanf("%d %d",&compare[i].b,&compare[i].e);
}
sort(compare,compare+n);
for(int i=0;i<m;i++)
{
int j=0,sum=0;
scanf("%d %d",&left,&right);
while(compare[j].b<left)
j++;
for(int k=j;k<n&&compare[k].e<=right;k++)
{
if(compare[k].b>=compare[j].e||k==j)
{
sum++;
j=k;
}
}
printf("%d\n",sum);
}
}
return 0;
}
上交oj一直显示输出超限,最后发现是因为
while(~scanf("%d %d",&n,&m))
//如果scanf之前没有~那么就会导致输出超限
~scanf()和scanf()!=EOF的作用是相同的,就是为了当没有输入的时候退出循环,scanf的返回值由后面的参数决定
scanf(’%d%d’, &a, &b);
如果a和b都被成功读入,那么scanf的返回值就是2
如果只有a被成功读入,返回值为1
如果a和b都未被成功读入,返回值为0
如果遇到错误或遇到end of file,返回值为EOF。