nssl1460-逛机房【bfs】
生活随笔
收集整理的這篇文章主要介紹了
nssl1460-逛机房【bfs】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正題
題目大意
nnn次詢問,給出一個數xxx,每次可以進行操作
詢問最少步驟使得xxx變為一個完全平方數
解題思路
我們可以從完全平方數開始廣搜,操作變為
即可
codecodecode
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; const int N=1e6+10; int T,f[N],w[1100],ans,k; bool v[N],z[N]; queue<int> q; void bfs(){while(!q.empty()){int x=q.front();k++;q.pop();for(int i=1;i<=1e5;i*=10){for(int k=0;k<10;k++){int y=x;y=y/i*i*10+y%i+k*i;if(y>=1e6||v[y])continue;q.push(y);v[y]=1;f[y]=f[x]+1;}}for(int i=1;i<=x;i*=10){for(int k=0;k<10;k++){if(i*10>x&&k==0)continue;int y=x;y=y-y/i%10*i+k*i;if(v[y])continue;q.push(y);v[y]=1;f[y]=f[x]+1;}}} } int main() {scanf("%d",&T);for(int i=1;i*i<1e6;i++)q.push(i*i),v[i*i]=1;bfs(); for(int i=1;i<=T;i++){int x;scanf("%d",&x);if(x==1e6)printf("0\n");else printf("%d\n",f[x]);} } 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的nssl1460-逛机房【bfs】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows如何安装安卓APP电脑如何
- 下一篇: nssl1459-空间简单度【扫描线,线