博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
nssl1460-逛机房【bfs】
阅读量:2022 次
发布时间:2019-04-28

本文共 940 字,大约阅读时间需要 3 分钟。

正题


题目大意

n n n次询问,给出一个数 x x x,每次可以进行操作

  1. 修改其中一个位,去掉前导零
  2. 删掉其中一个位,去掉前导零

询问最少步骤使得 x x x变为一个完全平方数


解题思路

我们可以从完全平方数开始广搜,操作变为

  1. 加入一个数
  2. 修改一个数

即可


c o d e code code

#include
#include
#include
#include
using namespace std;const int N=1e6+10;int T,f[N],w[1100],ans,k;bool v[N],z[N];queue
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]); }}

转载地址:http://ddwaf.baihongyu.com/

你可能感兴趣的文章
使用Docker Hub和华为云容器镜像服务搭建高速网盘
查看>>
世界首富马斯克,底层有一套强大的思维方式
查看>>
学会这2招,读100本书只是小目标
查看>>
你可能不信,领先80%的人的方法其实很简单
查看>>
懂了!VMware/KVM/Docker原来是这么回事儿
查看>>
分不清ERP、SAP、MES?我来帮你搞定
查看>>
程序员如何把控自己的职业
查看>>
什么是工程师文化?
查看>>
程序算法与人生选择
查看>>
一个人的行动力,取决于他的底层信念。
查看>>
Backup Exec 在Windows平台下安装、设置及对Oracle数据库备份详细说明
查看>>
WEB前端
查看>>
怎样提升看问题的高度?
查看>>
认错即是重生
查看>>
21 个“微习惯”,让你在 2021 年轻松改善生活
查看>>
思维能力,决定人生成就的高度
查看>>
如何变得更聪明?
查看>>
Centos6.5 搭建基于 SSH协议 Git Server 服务器
查看>>
详解HTTP返回值
查看>>
Varnish4.x配置文件详解
查看>>