验题人题解|统计区间内奇数与偶数的数量
2024-09-09 21:22:17
发布于:上海
5阅读
0回复
0点赞
Sol 1
对于 较小的情况,我们可以用暴力枚举的方式。即,对于 内的每一个数,判断是奇数还是偶数,并数一下一共有几个。
时间复杂度 ,其中 。
期望得分 分。
Sol 2
对于 中等的情况,我们可以用前缀和。即,设 表示 中有几个奇数, 表示 中有几个偶数。求 内有几个奇数/偶数,可以用前缀和相减去求,即答案为 。
时间复杂度 ,空间复杂度 , 与上文同理。
期望得分 分。
Sol 3
考虑到是连续区间,想想有没有数学解法。
-
Case 1, 同奇偶。
这时候 是一个偶数,也就是与 奇偶性相同的那种数会多 个。
假设 均为奇数,则奇数会有 个,偶数有 个。均为偶数同理。
你可以自己手酸找找规律。
-
Case 2, 不同奇偶
这时候奇偶个数一样,都是 个。
将上述过程实现即可,单次询问是 的,总复杂度 。可以采用位运算优化常数,尽管没用。
void solve(){
ll opt,l,r;
cin>>opt>>l>>r;
ll cnt1=(r-l+1)/2;
if((r-l)&1){
cout<<cnt1<<endl;
}
else{
if((opt&1)==(l&1)) cout<<cnt1+1<<endl;
else cout<<cnt1<<endl;
}
}
这里空空如也
有帮助,赞一个