Always keep a beginner's mind, |

luckydrawbox

园龄:4个月粉丝:1关注:2

题解 P1988 【火炬】

在这题极水的数据下,N×MN\times M 在十进制下不会超过 1818(既然题目标签没有高精就可以大胆猜测最大没越过 long long),所以只包含 0011 的数最多只有 218=2621442^{18}=262144 个,于是我们可以把这些数全部 dfs 找出来,对所有符合条件的 MM 取最小值即可。

#include<bits/stdc++.h>
using namespace std;
int n;
long long m=1e18;//提前赋个极大值
void dfs(long long now)
{
	if(now>1e18)
		return;
	if(now*10%n==0)
		m=min(m,now*10/n);
	if((now*10+1)%n==0)
		m=min(m,(now*10+1)/n);
	dfs(now*10);
	dfs(now*10+1);
}
int main()
{
    cin>>n;
    dfs(1);
    if(m==1e18)
    	cout<<"No Solution"<<endl;
    else
    	cout<<m<<endl;
	return 0;
}

福利

双倍经验&&三倍经验

本文作者:luckydrawbox

本文链接:https://www.cnblogs.com/luckydrawbox/p/18526677

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   luckydrawbox  阅读(3)  评论(0编辑  收藏  举报  
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起