[kuangbin带你飞]专题一 简单搜索 Find The Multiple :dfs
来源:互联网 发布:淘宝如何批量上传宝贝 编辑:程序博客网 时间:2024/05/16 11:43
题意
给一个正整数n,找出m,使得m是n的倍数,且m的十进制表示只包含“0”和“1”。
其中 1<=n<=200,m的十进制位数<100;
如果有多个解,输出任意一种解。
分析:
由于m的位数是<100的,而题目没有说 如果找不到这样的m,就输出“no”等等 这样的信息,所以,m一定可以找到!
那么,真的枚举100位的十进制数m,怎么判定m是不是n的倍数呢? m没办法存储。
又注意到 n=6的时候,样例给的结果是 m=100100100100100100,很明显m还可以是 1110.
所以猜想: 不需要搜索100位,就可以找出m的解。
那么m到底应该搜索多少位呢?我们看下long long的范围 2^63 =8*(2^10)^6=8*(10^18);
所以,用longlong来存储m的值,最多可以搜索 19位。
第一次代码,RE的错误,这题还有内存的限制,存储空间比较小,反正这么写会RE:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long ll;int ok;ll get(ll i){ ll ret=0; long long len=0; for(;(1<<len)<=i;len++); len--; while(len>=0){ ret=ret*10+((i&(1<<len))==(1<<len)); len--; } return ret;}int main(int argc, const char * argv[]) { ll n; while(~scanf("%lld",&n)){ ok=0; for(ll i=1;i<=(1<<19);i++) { ll mul=get(i); if(mul%n==0) { ok=1; // printf("i=%lld mul=%lld \n",i,mul); printf("%llu\n",mul); break; } } if(!ok) puts("no"); } return 0;}
388KB,172ms
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long ll;ll n,ans;void dfs(ll wei,ll tot){ //wei表示当前的tot总共有多少位。 if(ans!=-1) return; if(wei>19) return; if(tot%n==0) {ans=tot; return;} bfs(wei+1,tot*10); bfs(wei+1,tot*10+1);}int main(){ while(~scanf("%lld",&n) && n){ ans=-1; dfs(1,1); printf("%lld\n",ans); } return 0;}
0 0
- [kuangbin带你飞]专题一 简单搜索 Find The Multiple :dfs
- POJ 1426 Find The Multiple(kuangbin带你飞 专题一:简单搜索)
- [kuangbin带你飞]专题一 简单搜索E - Find The Multiple(POJ 1426)
- [kuangbin带你飞]专题一 简单搜索 E - Find The Multiple poj 1426
- [kuangbin带你飞]专题一 简单搜索 E - Find The Multiple
- POJ 1426 Find The Multiple([kuangbin带你飞]专题一 简单搜索 )
- [kuangbin带你飞]专题一 简单搜索 Fliptile :dfs
- [kuangbin带你飞] 专题一 简单搜索 棋盘问题 :DFS
- HDU 2612 find a way (kuangbin带你飞 专题一:简单搜索)
- [kuangbin带你飞]专题一 简单搜索N - Find a way(HDU 2612)
- [kuangbin带你飞]专题一 简单搜索 N - Find a way HDU2612
- [kuangbin带你飞]专题一 简单搜索 N - Find a way
- HDU 2612 Find a way([kuangbin带你飞]专题一 简单搜索)
- [kuangbin神带你飞]专题一 简单搜索
- kuangbin带你飞 专题一 简单搜索 (题解)
- Fire Game [kuangbin带你飞]专题一 简单搜索
- [kuangbin带你飞]专题一 简单搜索 总结
- Kuangbin带你飞专题一 简单搜索
- Web前端面试指导(四十二):如何在页面上实现一个圆形的可点击区域?
- sp的工具类
- Java String.split() 总结
- ICON资源的使用
- JDBC的事务处理
- [kuangbin带你飞]专题一 简单搜索 Find The Multiple :dfs
- 远程返回字符串,本地等级图片的显示
- Commando War(UVa 11729)贪心算法
- Leetcode 416. Partition Equal Subset Sum
- ubuntu VMtools安装方法
- 如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀, 问你如何才能准确称出4公升的水?(40秒-3分钟)
- 面向对象的三大特性总结
- 动态改变窗口图标的方法 WM_SETICON消息
- jdk高版本编译低版本jar导致的运行错误.md