1 条题解
-
0
自动搬运
来自洛谷,原作者为

naroto2022
花开花谢泪满巾,羊走羊归空余情。搬运于
2025-08-24 22:52:41,当前版本为作者最后更新于2024-02-05 17:19:51,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
P9883题解
算法
- 其实就是树状数组,设其原数组是 。
- 就是问 最少有多少非零位置,才能使其生成的树状数组 符合条件。
- 的值实际上是所有使得 的 的值加起来,再加上 。
- 如果 的 全是 ,但 非 ,那么 就必须非 ;
- 如果 的 只有一个非 ,但 为 ,那么 就必须非 ;
- 可以证明,其他情况下都可以让 为 。
代码
#include<bits/stdc++.h> const int N=1e5+5; int n,a[N],b[N],ans; char sc[N]; int main(){ int T; scanf("%d",&T); for(;T--;){ scanf("%d %s",&n,sc+1); ans=0; for(int i=1; i<=n; i++) a[i]=sc[i]-'0',b[i]=0; for(int i=1; i<=n; i++){ if(!b[i]&&a[i]||b[i]==1&&!a[i]) ++ans; if(a[i]&&(i&-i)+i<=n) ++b[(i&-i)+i]; } printf("%d\n",ans); } return 0; }
- 1
信息
- ID
- 9393
- 时间
- 1000ms
- 内存
- 1024MiB
- 难度
- 4
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者