CF1579F Array Stabilization (AND version) 题解
分析
根据 操作的性质,只要有一个 存在,这个数记作 ,那么 就可以变成 ,然后 又可以继续更新下一个数为 ,所以直接 bfs 解决即可。
最终的答案即为 bfs 的次数。注意,由于无论如何都会入队一次,最终答案需要减一。
代码实现
#include <bits/stdc++.h> using namespace std; inline int read(){ int x=0,f=0;char ch=getchar(); while(!isdigit(ch))f^=!(ch^45),ch=getchar(); while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),ch=getchar(); return f?-x:x; } inline void write(int x){ if(x<0)x=-x,putchar('-'); if(x>=10)write(x/10); putchar(x%10+'0'); } inline void writeln(int x){write(x);puts("");} int n,d; int a[1000005]; int main(){ int T=read(); while(T--){ n=read(),d=read(); for(int i=0;i<n;i++)a[i]=read(); queue <int> q; for(int i=0;i<n;i++)if(!a[i])q.push(i); int ans=0; while(!q.empty()){ int len=q.size(); for(int i=0;i<len;i++){ int u=q.front();q.pop(); int v=(u+d)%n; if(a[v]){ q.push(v);a[v]=0; } } ans++; } for(int i=0;i<n;i++)if(a[i])ans=-1; writeln(ans==-1?ans:ans-1); } #ifndef ONLINE_JUDGE system("pause"); #endif return 0; }
本文作者:tmjyh09
本文链接:https://www.cnblogs.com/tmjyh09/p/15943615.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
分类:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步