对于多组数据清理数组的问题
案例一 :
for(int i = 1; i <= n; i++){
cin >> a[i];
}
int x;
cin >> x;
int top = 1, now = a[1];
while(now >= x){
now &= a[++now];
}
cout << top - 1 << endl;
这里代码是寻找a[1] & a[2] & ...& a[r] 第一个大于 x 的 r
一般下 a[n+1]==0
因此 到 n+1 时必定会结束循环
但是注意到多组数据 a[n+1] 不一定为 0
因此需要 在循环前加上 a[n+1]=0
案例二 :
也是我们最常犯的错误
像bool数组、priority_queue、queue、deque、vector、cnt数组、以及stack等注意清0,当然这种比较容易检查出
对于break的问题
案例:
bool flg = 0;
for(int i = 1; i <= n; i++){
if( a[i] > x ){
puts("NO");
flg = 1;
}
}
if(!flg){
puts("YES");
}
这个是很nt的错误,但是还是有可能会发生,特别是长时间比赛时导致大脑的爆炸的时候。
flg=1 后加上 break 否则可能多次 puts