Output Limit Exceed错误原因

Output Limit Exceed与Time Limit Exceed 有点像,都是超时限制。

不同的是,TLE一般是算法出了问题,太慢了,或者某些地方陷入了死循环,导致超时,OLE一般是某地方输出陷入了死循环,或者输出没有明确的终止(一般是由于输入没有明确终止)。

举个最常见的例子:

如果题目没有说明有多少组,我们应该这么输入:

while(~scanf("%s",str)){}
while(scanf("%s",str)!=EOF){}

 或者:

while(cin>>str){}

 但有人输入时不加 ~符号:

while(~scanf("%s",str)){}

看似没有问题,实际这也是最典型的OLE案例;

首先我们清楚,scanf返回的是读入参数的个数,正确输入了几个参数就返回几,我们把它称为a,而通常情况下a为正整数,那么取反后结果不会为0,while可以循环。

当scanf错误读入或者读到文件结尾时(ACM测评为文件读入读出),scanf返回EOF,也就是-1,用二进制表示为11111111,对它取反,为0,while终止。

但如果不加取反运算符,那么while一直不会终止,出现OLE。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值