2021GDCPC广东省大学生程序设计竞赛 J.Jerry(bfs)
Posted live4m
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021GDCPC广东省大学生程序设计竞赛 J.Jerry(bfs)相关的知识,希望对你有一定的参考价值。
题意:
解法:
预处理平方数,只有sqrt(1e5)个.
然后从0点开始bfs,计算出到达每个距离需要的最少操作次数,对于每组询问O(1)输出即可.
code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxm=1e5+5;
vector<int>temp;
int mark[maxm];
int d[maxm];
void solve(){
for(int i=1;i*i<=1e5;i++){
temp.push_back(i*i);
}
queue<int>q;
q.push(0);
mark[0]=1;
while(q.size()){
int x=q.front();q.pop();
for(auto i:temp){
if(x+i<=1e5&&!mark[x+i]){
mark[x+i]=1;
d[x+i]=d[x]+1;
q.push(x+i);
}
if(x-i>=0&&!mark[x-i]){
mark[x-i]=1;
d[x-i]=d[x]+1;
q.push(x-i);
}
}
}
int T;cin>>T;
while(T--){
int x;cin>>x;
cout<<d[x]<<endl;
}
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);
solve();
return 0;
}
以上是关于2021GDCPC广东省大学生程序设计竞赛 J.Jerry(bfs)的主要内容,如果未能解决你的问题,请参考以下文章
2021GDCPC广东省大学生程序设计竞赛 A An Easy Problem 堆优化
2021GDCPC广东省大学生程序设计竞赛 A.An Easy Problem(二分)