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(数论)的更多相关文章

  1. Uva 11198 - Dancing Digits

    Problem D Dancing Digits 题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid ...

  2. UVA 10627 - Infinite Race(数论)

    UVA 10627 - Infinite Race option=com_onlinejudge&Itemid=8&page=show_problem&category=516 ...

  3. uva 10555 - Dead Fraction)(数论)

    option=com_onlinejudge&Itemid=8&category=516&page=show_problem&problem=1496" st ...

  4. uva 10560 - Minimum Weight(数论)

    题目连接:uva 10560 - Minimum Weight 题目大意:给出n,问说至少须要多少个不同重量的砝码才干称量1~n德重量,给出所选的砝码重量,而且给出k,表示有k个重量须要用上述所选的砝 ...

  5. UVA 11754 - Code Feat(数论)

    UVA 11754 - Code Feat 题目链接 题意:给定一个c个x, y1,y2,y3..yk形式,前s小的答案满足s % x在集合y1, y2, y3 ... yk中 思路:LRJ大白例题, ...

  6. UVA 718 - Skyscraper Floors(数论)

    UVA 718 - Skyscraper Floors 题目链接 题意:在一个f层高的楼上,有e个电梯,每一个电梯有x,y表示y + k * x层都能够到,如今要问从a层是否能到达b层(中间怎么换乘电 ...

  7. uva 10692 - Huge Mods(数论)

    题目链接:uva 10692 - Huge Mods 题目大意:给出一个数的次方形式,就它模掉M的值. 解题思路:依据剩余系的性质,最后一定是行成周期的,所以就有ab=abmod(phi[M])+ph ...

  8. UVA 12009 - Avaricious Maryanna(数论)

    UVA 12009 - Avaricious Maryanna 题目链接 题意:给定一个n.求出n个数位组成的数字x,x^2的前面|x|位为x 思路:自己先暴力打了前几组数据,发现除了1中有0和1以外 ...

  9. uva 11728 - Alternate Task(数论)

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u011328934/article/details/36409469 option=com_onli ...

随机推荐

  1. 修改mysql root账户登录密码

    打开mysql.exe(如果你配置了path的话,打开cmd即可)键入: mysqladmin -u root -p password [你的新密码][回车] 然后会要求你输入你当前的密码,就修改成功 ...

  2. python生成二维数组

    Array= [[0 for i in range(15)] for i in range(15)]

  3. CSS3和js炫酷点击按钮3D翻转动画特效

    简要教程 flipside是一款使用CSS3和js制作的炫酷点击按钮无缝过渡到确认面板的过渡动画特效.该点击按钮特效在按钮不同方向的边部点击时,产生的过渡动画特效是不一样的. 在线预览   源码下载 ...

  4. IIS安全加固

    1 删除IIS默认站点 把IIS默认安装的站点删除或禁用掉. 2 禁用不必要的Web服务扩展 打开IIS 管理器,检查是否有不必要的“Web服务扩展”,如果有则禁用掉.如下图所示: 3 IIS访问权限 ...

  5. Linux 下 tail 命令

    简述 tail命令从指定点开始将文件写到标准输出,使用tail命令的“-f”选项可以方便的查阅正在改变的日志文件,“tail -f filename”会把filename里最尾部的内容显示在屏幕上,并 ...

  6. mysql 5.7.12----bin/mysqld --initialize --user=mysql出错

    我最近在安装mysql 5.7.12,本来之前安装mysql 5.7.11时用命令 bin/mysqld --initialize --user=mysql 可以很好的初始化,但是用在5.7.12版本 ...

  7. Linux Ubuntu下软件包管理

    自己整理的一个关于dpkg, apt, aptitude三者的常用命令,方便以后查阅. dpkg: dpkg是用来安装.deb文件,但不会解决模块的依赖关系,且不会关心ubuntu的软件仓库内的软件, ...

  8. CAS (2) —— Mac下配置CAS到Tomcat(客户端)

    CAS (2) -- Mac下配置CAS到Tomcat(客户端) tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 cas版本: cas4.1.2 cas-clie ...

  9. iOS边练边学--UIGestureRecognizer手势识别器简单介绍

    iOS 3.2之后,苹果退出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度. 一.UIGestureRecognizer UIGestureRe ...

  10. 总结golang之map

    总结golang之map 2017年04月13日 23:35:53 趁年轻造起来 阅读数:18637 标签: golangmapgo 更多 个人分类: golang   版权声明:本文为博主原创文章, ...