UVA 1341 - Different Digits(数论)
UVA 1341 - Different Digits
题意:给定一个正整数n。求一个kn使得kn上用的数字最少。假设同样,则输出值最小的
思路:
首先利用鸽笼原理证明最多须要2个数字去组成
设一个数字k。组成k,kk,kkk,kkkk... %n之后余数必定在0 - (n - 1)之间,所以必定能选出两个余数相等的数字相减为0,这个数字就是由0和k组成的。
因此仅仅要考虑一个数字和两个数字的情况,去bfs。记忆化余数。由于余数反复必定形成周期了
代码:
#include <stdio.h>
#include <string.h> const int INF = 0x3f3f3f3f;
const int N = 66666;
int n, num[2], vis[N], ans, save[N];
struct Queue {
int mod, pre, num, len;
Queue(){}
Queue(int mod, int pre, int num, int len) {
this->mod = mod;
this->pre = pre;
this->num = num;
this->len = len;
}
} q[N * 2]; void out(int now, int d) {
if (now == -1) return;
out(q[now].pre, d - 1);
save[d] = q[now].num;
} int judge(int now, int d) {
if (now == -1) return 0;
int tmp = judge(q[now].pre, d - 1);
if (tmp != 0) return tmp;
if (save[d] == q[now].num) return 0;
else if (q[now].num < save[d]) return -1;
else return 1;
} void bfs() {
int head = 0, tail = 0;
if (num[0] != 0) {
q[tail++] = Queue(num[0] % n, -1, num[0], 1);
vis[num[0] % n] = 1;
}
if (num[1] != -1 && num[1] != 0) {
q[tail++] = Queue(num[1] % n, -1, num[1], 1);
vis[num[1] % n] = 1;
}
while (head < tail) {
Queue now = q[head];
if (now.len > ans) return;
if (now.mod == 0) {
if (now.len <= ans) {
if (now.len != ans || judge(head, ans - 1) < 0) {
ans = now.len;
out(head, ans - 1);
}
}
}
Queue next;
for (int i = 0; i < 2; i++) {
if (num[i] == -1) continue;
next = Queue((now.mod * 10 + num[i]) % n, head, num[i], now.len + 1);
if (vis[next.mod]) continue;
vis[next.mod] = 1;
q[tail++] = next;
}
head++;
}
} int main() {
while (~scanf("%d", &n) && n) {
ans = INF;
for (int i = 1; i < 10; i++) {
num[0] = i; num[1] = -1;
memset(vis, 0, sizeof(vis));
bfs();
}
if (ans == INF) {
for (int i = 0; i < 10; i++) {
for (int j = i + 1; j < 10; j++) {
num[0] = i; num[1] = j;
memset(vis, 0, sizeof(vis));
bfs();
}
}
}
for (int i = 0; i < ans; i++)
printf("%d", save[i]);
printf("\n");
}
return 0;
}
UVA 1341 - Different Digits(数论)的更多相关文章
- Uva 11198 - Dancing Digits
Problem D Dancing Digits 题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid ...
- UVA 10627 - Infinite Race(数论)
UVA 10627 - Infinite Race option=com_onlinejudge&Itemid=8&page=show_problem&category=516 ...
- uva 10555 - Dead Fraction)(数论)
option=com_onlinejudge&Itemid=8&category=516&page=show_problem&problem=1496" st ...
- uva 10560 - Minimum Weight(数论)
题目连接:uva 10560 - Minimum Weight 题目大意:给出n,问说至少须要多少个不同重量的砝码才干称量1~n德重量,给出所选的砝码重量,而且给出k,表示有k个重量须要用上述所选的砝 ...
- UVA 11754 - Code Feat(数论)
UVA 11754 - Code Feat 题目链接 题意:给定一个c个x, y1,y2,y3..yk形式,前s小的答案满足s % x在集合y1, y2, y3 ... yk中 思路:LRJ大白例题, ...
- UVA 718 - Skyscraper Floors(数论)
UVA 718 - Skyscraper Floors 题目链接 题意:在一个f层高的楼上,有e个电梯,每一个电梯有x,y表示y + k * x层都能够到,如今要问从a层是否能到达b层(中间怎么换乘电 ...
- uva 10692 - Huge Mods(数论)
题目链接:uva 10692 - Huge Mods 题目大意:给出一个数的次方形式,就它模掉M的值. 解题思路:依据剩余系的性质,最后一定是行成周期的,所以就有ab=abmod(phi[M])+ph ...
- UVA 12009 - Avaricious Maryanna(数论)
UVA 12009 - Avaricious Maryanna 题目链接 题意:给定一个n.求出n个数位组成的数字x,x^2的前面|x|位为x 思路:自己先暴力打了前几组数据,发现除了1中有0和1以外 ...
- uva 11728 - Alternate Task(数论)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u011328934/article/details/36409469 option=com_onli ...
随机推荐
- Gson json解析工具
json 解析工具 ,谷歌出品 对象转换字符串 HashMap<String,String> hashMap = new HashMap<String, String>(); ...
- python pip 升级
首先安装python,在百度中搜索python,进入python官网.点击download,选择电脑对应的系统进行下载,此处以windows系统的python 3.5.1进行介绍,点击即可下载. ...
- 基于jQuery左右滑动切换图片代码
分享一款基于jQuery左右滑动切换图片代码.这是一款基于jQuery实现的左右滑动切换焦点图代码.效果图如下: 在线预览 源码下载 实现的代码: <div class="v_ou ...
- 【WPF】TabControl垂直分页栏/选项卡
分页栏控件TabControl默认的选项卡是水平方向的,如下: 现在要改成垂直方向的: 给TabControl 标签添加属性 TabStripPlacement=”Left” , 如下: <Ta ...
- nand ECC 算法记录
nandflash ECC 原理记录. nand ECC 全称是Error Checking and correction. 该算法分为列校验和行校验. 列校验有下图所示: * 如上图所示, CP0 ...
- 測试Service
<strong><span style="font-size:18px;">自己定义Service:</span></strong> ...
- CodeIgniter(3.1.4)框架使用静态文件(js,css)
调整目录结构: 可以在控制器中这样加载视图: * 加载url辅助类. views视图中可以这样引用静态文件: 则最终的静态文件url会生成这样:
- variable `xxx' has initializer but incomplete type
错误:variable `xxx' has initializer but incomplete type 原因:xxx对应的类型没有找到,只把xxx声明了但是没给出定义.编译器无从确认你调用的构造函 ...
- ThinkPHP3.2 介绍
模块化 驱动化 为云平台而生ThinkPHP3.2正式版发布! ThinkPHP是国内领先的WEB应用开发框架,诞生于2006年初,在国内具有良好的口碑和广大的用户群,秉承了大道至简的开发理念,让WE ...
- e586. Drawing Simple Shapes
There are two ways to draw basic shapes like circles, ovals, lines, arcs, squares, rectangles, round ...