- 浏览: 202477 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (137)
- c++ (74)
- c++,算法,回溯 (2)
- DP问题。 (9)
- DP问题,0/1背包问题 (3)
- 数学问题 (6)
- 贪心算法 (10)
- 排序 (16)
- 数据结构 (7)
- 容器 (2)
- 模拟问题 (2)
- 水题 (8)
- 并查集 (3)
- 非技术 (2)
- 素数问题 (1)
- DFS (3)
- 二叉树 (1)
- 递归 (1)
- 图论 (5)
- 最小生成树 (5)
- 最短路径 (6)
- bell_flaod算法 (2)
- hash (3)
- 二分查找 (1)
- 搜索 (5)
- BFS (5)
- STL (3)
- 字符串hash (1)
- 拓扑排序 (1)
- 字典树 (4)
- 哈弗曼树 (1)
- KMP (7)
- 线段树 (9)
- 树状数组 (6)
- 全排列 (2)
- DP问题 (2)
- LCS (1)
- 最长不下降子序列 (2)
- 面试经验 (3)
大致题意:
给出一个整数n,(1 <= n <= 200)。求出任意一个它的倍数m,要求m必须只由十进制的'0'或'1'组成。
解题思路:
首先暴力枚举肯定是不可能的 1000ms 想不超时都难,而且枚举还要解决大数问题。。
要不是人家把这题放到搜索,怎么也想不到用BFS。。。
解题方法: BFS+同余模定理
不说废话。
首先说说朴素的不剪枝搜索方法:
我以n=6为例
首先十进制数,开头第一个数字(最高位)一定不能为0,即最高位必为1
设6的 ”01十进制倍数” 为k,那么必有k%6 = 0
现在就是要用BFS求k值
1、先搜索k的最高位,最高位必为1,则此时k=1,但1%6 =1 != 0
因此k=1不是所求,存储余数 1
2、搜索下一位,下一位可能为0,即 k*10+0,此时k=10,那么k%6=4
可能为1,即 k*10+1,此时k=11,那么k%6=5
由于余数均不为0,即k=10与k=11均不是所求
3、继续搜索第三位,此时有四种可能了:
对于k=10,下一位可能为0,即 k*10+0,此时k=100,那么k%6=4
下一位可能为1,即 k*10+1,此时k=101,那么k%6=5
对于k=11,下一位可能为0,即 k*10+0,此时k=110,那么k%6=2
下一位可能为1,即 k*10+1,此时k=111,那么k%6=3
由于余数均不为0,即k=100,k=101,k=110,k=111均不是所求
4、继续搜索第四位,此时有八种可能了:
对于k=100,下一位可能为0,即 k*10+0,此时k=1000,那么k%6=4
下一位可能为1,即 k*10+1,此时k=1001,那么k%6=5
对于k=101,下一位可能为0,即 k*10+0,此时k=1010,那么k%6=2
下一位可能为1,即 k*10+1,此时k=1011,那么k%6=3
对于k=110,下一位可能为0,即 k*10+0,此时k=1100,那么k%6=2
下一位可能为1,即 k*10+1,此时k=1101,那么k%6=3
对于k=111,下一位可能为0,即 k*10+0,此时k=1110,那么k%6=0
下一位可能为1,即 k*10+1,此时k=1111,那么k%6=1
我们发现k=1110时,k%6=0,即1110就是所求的倍数
如果给的n较大,得到的将是一个大数,这个时候int类型将不能满足需要,我们就开一个__int64的数组供我们使用,具体代码如下:
#include <iostream>
using namespace std;
__int64 q[9999999];
int n;
void BFS()
{
int rear,front;
rear=front=0;
q[rear]=1;//初始化最高位
rear++;
__int64 top;
while (rear>front)
{
top=q[front];
if (top%n==0)
{
break;
}
top*=10;//像一个队列一样双向循环
q[rear]=top;
rear++;
q[rear]=top+1;
rear++;
front++;
}
printf("%I64d\n",top);
}
int main()
{
while (cin>>n&&n!=0)
{
BFS();
}
return 0;
}
发表评论
-
虚函数、纯虚函数、虚基类、抽象类、虚函数继承、虚继承
2013-08-29 14:34 842虚函数:虚函数是C++中用于实现多态(polymorphis ... -
排序算法总结
2013-05-17 11:00 843选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, ... -
poj 3122
2012-12-11 19:51 870题意:作者要开一个生日party,他现在拥有n块高度都为1 ... -
poj 3273
2012-12-11 16:49 987题意:给你天数n,和每天需要花的钱,让你把这些天分成m份(每份 ... -
字典树学习材料
2012-05-30 14:29 970字典树,又称单词查找树,Trie树,是一种树形结构,典型应 ... -
poj 1159
2012-05-28 19:08 1447题目大意:给你一段字符串,让你求出在中间最少加入几个字符 ... -
poj 3176
2012-05-28 14:47 1019大致题意: 输入一个n层的三角形,第i层有i个数,求从第 ... -
poj 1260
2012-05-28 09:54 1615题意解释: 有n个等级的珠宝,等级依次升高,等级越高价钱越高 ... -
poj 1836
2012-05-28 09:22 2715是POJ2533的扩展题。题意不难,令到原队列 ... -
poj 2533
2012-05-26 15:36 1274在做这道题目之前,首先让我们了解一下什么是LIS算法,LIS俗 ... -
poj 3267
2012-05-26 09:43 804从程序可以看出,第i个位置到L所删除的字符数,总是先取最坏情况 ... -
poj 1276
2012-05-25 16:20 2397题意: 这道题的意思是给你一堆钱,各种面值的都有,比 ... -
poj 1094
2012-05-25 13:54 1108题意:给出字母个数,和有限个有序对(a<b)求出能确定字 ... -
poj 3393
2012-05-23 17:00 1260大致题意: 科普文一篇,文章80%都是无用信息,因为 ... -
poj 3007
2012-05-14 10:21 994大致题意: 给定一个字符串,从任意位置把它切为两半, ... -
poj 3096
2012-05-10 21:09 1012题意: 定义D-pairs表示取字符串s中相距为D的两个字母 ... -
poj 1797
2012-04-24 15:05 1627题目大意是就是何处一个图,n个顶点和m条边,每个边都有最大承载 ... -
poj 1338
2012-04-23 10:20 1260题意:题目意思是求由2,3,5的乘积组成的数从大到小排列,从1 ... -
poj 2021
2012-04-19 15:00 951题意:Ted今年100岁,给出n对他家族的关系:“父 ... -
poj 1656
2012-04-19 10:07 1121题目要求:一道纯的模拟题目。 直接上代码: ...
相关推荐
【标题】"POJ1426-Find The Multiple【BFS+同余模】"是一道来源于北京大学在线编程平台POJ的算法题目,主要涉及到了广度优先搜索(BFS)与同余模运算的知识点。这道题目要求解决的是寻找一个整数的倍数问题,可能...
【标题】"北大POJ初级-所有题目AC代码+解题报告" 涉及的知识点主要集中在编程、算法和在线判题系统方面。北京大学(Peking University, 简称PKU)的POJ(Peking University Online Judge)是一个为计算机科学爱好者...
* 广度优先搜索:广度优先搜索是指解决问题的广度优先搜索算法,如 poj3278、poj1426、poj3126、poj3087、poj3414。 * 简单搜索技巧和剪枝:简单搜索技巧和剪枝是指解决问题的简单搜索技巧和剪枝算法,如 poj2531、...
* 广度优先搜索:例如 poj3278、poj1426、poj3126、poj3087、poj3414。 * 简单搜索技巧和剪枝:例如 poj2531、poj1416、poj2676、poj1129。 5. 动态规划: * 背包问题:例如 poj1837、poj1276。 * 类型 DP:...
- 广度优先搜索:如`poj3278, poj1426`。 - **动态规划** - 背包问题:如`poj1837, poj1276`。 - 简单DP:如`poj3267, poj1836`。 - **数学** - 组合数学:如`POJ3252, poj1850`。 - 数论:如`poj2635, poj...
- **例题**:poj3278, poj1426, poj3126, poj3087, poj3414 - **解释**:复杂动态规划问题可能涉及多维状态转移、记忆化搜索等技巧。 #### 3. 状态压缩动态规划 - **例题**:poj2531, poj1416, poj2676, poj1129 - ...
poj2488、poj3083等是DFS的练习,poj3278、poj1426等是BFS的题目。 5. **动态规划**和**数学**:poj1837、poj1276是简单的动态规划问题,poj3267、poj1836等进一步强化了DP,poj3252、poj1850等则涉及组合数学,poj...
- POJ 3278、POJ 1426:特殊搜索策略的应用。 - POJ 3126、POJ 3087:复杂搜索策略解决实际问题。 ### 动态规划 #### 一维动态规划 - **题目示例**: - POJ 1837、POJ 1276:基础动态规划问题。 #### 多维动态...
### ACM新手刷题攻略之POJ ... - 推荐题目:[poj3278](https://vjudge.net/problem/POJ-3278)、[poj1426](https://vjudge.net/problem/POJ-1426)、[poj3126](https://vjudge.net/problem/POJ-3126)、[poj3087]...
2. **组合数学**:如排列组合计算(poj3278, poj1426, poj3126, poj3087.poj3414)。 3. **矩阵运算**:矩阵乘法和矩阵快速幂(poj2531, poj1416, poj2676, 1129)。 ### 五、状态压缩 1. **状态压缩动态规划**:...
- poj1426 - poj3126 - poj2251 - poj2243 - poj3352 - poj1111 - poj3051 - poj1129 - poj2907 - **应用场景**:适用于搜索、连通性检测等问题。 **2. 最短路径算法** - **定义**:包括 Dijkstra 算法、...
- **示例题目**: poj3278, poj1426, poj3126, poj3087, poj3414 #### 4. 字符串搜索 - **内容**: 包括后缀树、AC自动机等字符串搜索算法。 - **示例题目**: poj2531, poj1416, poj2676, poj1129 ### 五、数学 ##...
* 广度优先搜索:poj3278, poj1426, poj3126, poj3087, poj3414 * 简单搜索技巧和剪枝:poj2531, poj1416, poj2676, poj1129 五、动态规划 * 背包问题:poj1837, poj1276 * 类似表的简单 DP:poj3267, poj1836, ...
例如,POJ2488和POJ3083是深度优先搜索的经典例题,而POJ3278和POJ1426则是广度优先搜索的代表题。 动态规划部分涵盖了背包问题和简单DP两方面。例如,POJ1837和POJ1276是背包问题的典型例题,而POJ3267和POJ1836则...
(2) 广度优先搜索:poj3278, poj1426, poj3126, poj3087, poj3414 (3) 简单搜索技巧和剪枝:poj2531, poj1416, poj2676, 1129 五、动态规划 本部分涵盖了动态规划,包括背包问题、简单DP和其他DP问题。 (1) 背包...
2. 广度优先搜索(BFS):如poj3278、poj1426等。 3. 搜索技巧与剪枝:提高搜索效率,如poj2531、poj1416等。 五、动态规划 1. 背包问题:如poj1837、poj1276。 2. 简单动态规划:如表格形式的DP问题,如poj3267、...
poj2488、poj3083和poj3009是DFS的例子,而poj3278、poj1426和poj3126则侧重于BFS。poj2531、poj1416和poj2676等题目则包含搜索技巧和剪枝的实践。 五、动态规划 动态规划是一种高效解决问题的方法,常用于背包问题...
- 示例题目:poj3278, poj1426, poj3126, poj3087, poj3414 3. **矩阵优化** - 示例题目:poj2531, poj1416, poj2676, poj1129 #### 数学 1. **组合数学** - **组合数计算** - **容斥原理** - **递推关系** ...
- **广度优先搜索(BFS)**:poj3278、poj1426 等。 - **搜索技巧和剪枝**:避免无效搜索,如 poj2531、poj1416。 5. **动态规划**: - **背包问题**:如 poj1837、poj1276。 - **表格形式的简单DP**:如 poj...