博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
URAL 1495 One-two, One-two 2
阅读量:7221 次
发布时间:2019-06-29

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

思路:

折半枚举+高精度技巧。

先dfs枚举出小于等于15位的情况。

dp[i]表示余数为i的最小的数。

_dp[i]表示余数为i正好15的数。

然后枚举余数i,把它乘以1e15再模n后得到t,然后找_dp[n-t]

代码:

#include
using namespace std;#define ll long long#define pb push_back#define mem(a,b) memset(a,b,sizeof(a))const int N=1e6+5;const ll INF=0x3f3f3f3f3f3f3f3f;ll dp[N],_dp[N];int n;void dfs(ll num,int deep){ if(num){ dp[num%n]=min(dp[num%n],num); if(deep==15){ _dp[num%n]=min(_dp[num%n],num); return ; } } dfs(num*10+1,deep+1); dfs(num*10+2,deep+1);}int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>n; mem(dp,INF); mem(_dp,INF); dfs(0,0); if(dp[0]!=INF){ cout<
<

 

转载于:https://www.cnblogs.com/widsom/p/8378922.html

你可能感兴趣的文章
使用 Applet 渲染 jzy3d WireSurface 波动率曲面图
查看>>
9 Web开发——springmvc自动配置原理
查看>>
截取图片
查看>>
Python学习--01入门
查看>>
MySQL联合查询语法内联、左联、右联、全联
查看>>
看牛顿法的改进与验证局部收敛
查看>>
第十篇、自定义UIBarButtonItem和UIButton block回调
查看>>
复分析学习1
查看>>
Java虚拟机笔记(四):垃圾收集器
查看>>
计算机运行命令全集
查看>>
WebSocket 实战
查看>>
二次排序
查看>>
CSS:如何清除a标签之间的默认留白间距
查看>>
selenium随笔
查看>>
leetcode599
查看>>
String类中“==”和“equals()”的区别
查看>>
leetcode--883
查看>>
the application could not be verified
查看>>
[转]Centos配置国内yum源
查看>>
redis数据类型和应用场景
查看>>