题解 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;
}

福利

双倍经验&&三倍经验

posted @ 2021-06-20 12:10  luckydrawbox  阅读(21)  评论(0)    收藏  举报  来源