题解:CF2115A Gellyfish and Flaming Peony
首先一个十分显然的点是最后数组中的数都是
有一个比较显然的策略就是将一个数先变成
我们可以得出
那么我们的首要任务就是将一个数变成
int a[N];
int n;
int vis[N];
int ggcd;
int que[N];
int bfs(){
int ll=1,rr=0;
for(int i=1;i<=n;++i){
if(vis[a[i]]==-1){
vis[a[i]]=0;
que[++rr]=a[i];
if(a[i]==ggcd) return 1;
}
}
while(ll<=rr){
int u =que[ll++];
for(int i=1;i<=n;++i){
int t=__gcd(a[i],u);
if(vis[t]==-1){
que[++rr]=t;
vis[t]=vis[u]+1;
if(t==ggcd) return vis[t];
}
}
}
return 0;
}
我们来看一下时间复杂度,看上去它是 乱搞高效的方式知道将一个数字变成
然后就完善一些输入输出之类的,就搞定了。
扔一坨代码