我暂时找到了局部错误:
- `l=r=0`应放在`if(l && r)` 里;
- 同时,`else continue`没啥用可以删去;
具体为:
```cpp
for(int i=1;i<=n;i=flag?r:i+1)
{
flag=false;
if(h[i]!=0)
{
if(!l) l=i;
else if(!r) r=i;
}
if(l && r)
{
flag=true;
if(r-l>1)
for(int j=l+1;j<=r-1;j++) ans++;
l=r=0;
}
}
```
by Zwjoey @ 2022-08-23 07:57:27
经过我们机房一位大犇几分钟的调试,终于找到了:
- 虽然每次累加区间时, `flag=true` , $i$ 就会从 $r$ 开始而不是 $i(r)+1 $ ,但每次我都在进入下层循环时 `l=r=0` ,导致死循环;
- ∴要引入一个中间变量 $mid$ ,在 $r$ 清零前 `mid=r` 并将三目运算改为 `i=flag?mid:i+1` 。
学到了调试方法。
by Zwjoey @ 2022-08-23 08:14:29