D. Required Length

题意:给你一个长度n,一个数x,x每个后续状态可以由前一个状态乘以前一个状态的某一位上的数字得到,问最少多少步,能把x变成一个n位数。如果不能变成n位数,输出-1。

思路:bfs + map。map用来记录第一次到达某个数所要经过的步数,第一次找到的值就是步数的最小值。

#include<bits/stdc++.h>
#define int long long
using namespace std; int n, x;
map<int,int> mp; int getlen(int x){
int cnt = 0;
while(x > 0){
x /= 10;
cnt ++;
}
return cnt;
} inline set<int> getdigit(int x){
set<int> s;
while(x > 0){
if(x % 10 != 0){
s.insert(x % 10);
}
x = x / 10;
}
return s;
} signed main(){
cin >> n >> x;
if(getlen(x) == n){
cout << 0 << endl;
return 0;
}
else if(getlen(x) > n){
cout << -1 << endl;
return 0;
}
queue<int> q;
q.push(x);
mp[x] = 0;
while(!q.empty()){
int u = q.front();
q.pop();
if(getlen(u) == n){
cout << mp[u];
return 0;
}
else if(getlen(u) > n){
cout << -1;
return 0;
}
set<int> s = getdigit(u);
for(auto it : s){
if(!mp.count(it * u)){
mp[it * u] = mp[u] + 1;
q.push(it * u);
}
}
} cout << -1;
return 0;
}

D. Required Length的更多相关文章

  1. *HDU 1392 计算几何

    Surround the Trees Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  2. [转载]Java数组扩容算法及Java对它的应用

    原文链接:http://www.cnblogs.com/gw811/archive/2012/10/07/2714252.html Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组 ...

  3. java中常用的工具类(三)

    继续分享java中常用的一些工具类.前两篇的文章中有人评论使用Apache 的lang包和IO包,或者Google的Guava库.后续的我会加上的!谢谢支持IT江湖 一.连接数据库的综合类       ...

  4. [转]Modernizr的介绍和使用

    转载自:http://blog.chinaunix.net/uid-21633169-id-4286857.html 传统浏览器目前不会被完全取代,令你难以将最新的 CSS3 或 HTML5 功能嵌入 ...

  5. AESwithJCE http://www.coderanch.com/how-to/content/AES_v1.html

    Using AES with Java Technology By Rags SrinivasJune 2003 In September 2000, the National Institute o ...

  6. 使用RAML描述API文档信息的一些用法整理

    RAML是Restful API Modeling Language的缩写,是用来描述API信息的文档. 创建一个.raml后缀的文件,用Atom打开. 基本用法 #%RAML 0.8 title: ...

  7. Python轻量Web框架Flask使用

    http://blog.csdn.net/jacman/article/details/49098819 目录(?)[+] Flask安装 Python开发工具EclipsePyDev准备 Flask ...

  8. Modernizr的介绍和使用

    传统浏览器目前不会被完全取代,令你难以将最新的 CSS3 或 HTML5 功能嵌入你的网站. Modernizr 正是为解决这一难题应运而生,作为一个开源的 JavaScript 库,Moderniz ...

  9. [转载]两个半小时学会Perl

    Learn Perl in about 2 hours 30 minutes By Sam Hughes Perl is a dynamic, dynamically-typed, high-leve ...

  10. CodeForces 166E -Tetrahedron解题报告

    这是本人写的第一次博客,学了半年的基础C语言,初学算法,若有错误还请指正. 题目链接:http://codeforces.com/contest/166/problem/E E. Tetrahedro ...

随机推荐

  1. scikit-learn.datasets 机器学习库

    scikit-learn是一个用于Python的机器学习库,提供了大量用于数据挖掘和数据分析的工具.以下是对这些函数和方法的简要描述: clear_data_home: 清除数据集目录的内容. dum ...

  2. [转帖]高并发下nginx配置模板

    user web;       # One worker process per CPU core.   worker_processes 8;       # Also set   # /etc/s ...

  3. [转帖]怎么查看Linux服务器硬件信息,这些命令告诉你

    https://zhuanlan.zhihu.com/p/144368206 Linux服务器配置文档找不到,你还在为查询Linux服务器硬件信息发愁吗?学会这些命令,让你轻松查看Linux服务器的C ...

  4. [转帖]神秘的backlog参数与TCP连接队列

    https://www.cnblogs.com/codelogs/p/16060820.html 简介# 这要从一次压测项目说起,那是我们公司的系统与另几家同行公司的系统做性能比拼,性能数据会直接影响 ...

  5. [转帖]如何在本地编译安装部署自动化回归测试平台 AREX

    https://zhuanlan.zhihu.com/p/613877597 AREX 官方 QQ 交流群:656108079 本文将详细为大家介绍一下自动化回归测试平台 AREX 以及如何在本地进行 ...

  6. 据说这道Go面试题90%的人都搞错了!

    [Go面试向]defer与time.sleep初探 大家好,我是阳哥,这是我们Go就业训练营小伙伴 寸铁同学 整理的一道很有意思的面试题. 知其然更要知其所以然,通过断点调试的思路带你搞清楚来龙去脉. ...

  7. WebAssembly入门笔记[2]:利用Memory传递数据

    利用灵活的"导入"和"导出"机制,WebAssembly与承载的JavaScript应用之间可以很便利地"互通有无".<与JavaSc ...

  8. vue2-vue3监听子组件的生命周期的两种方式

    1.生命周期 生命周期是指:vue实例从创建到销毁这一系列过程.vue官网生命周期如下图所示: vue的生命周期有多少个 beforeCreate, created, beforeMount, mou ...

  9. 【k哥爬虫普法】简历大数据公司被查封,个人隐私是红线!

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  10. docker 镜像导出和导入(适用于内网无法拉镜像的问题)

    1.在外网将镜像从指定的仓库拉下来 docker pull consul 现在已将consul镜像拉到了可连外网的服务器  2.将镜像把包到指定的tar文件中 docker save consul:l ...