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. 常见电源品牌大揭密(转贴自pceva,作者royalk)

    常见电源品牌大揭密(转贴自pceva,作者royalk) 介绍电源品牌代工厂之前,必须介绍一下电源分类: 标准电源 标准电源就是电脑城装机用得最多的电源,性能正常,外观一般,原生接线,也没有什么风扇停 ...

  2. bnuoj16491

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=16491 题意:有t组测试数据,每组测试数据第一行为n,m,接下来有n种跑法,m为最大的能力,每一种跑 ...

  3. C++笔记 4

    1.类和对象   类就是对对象的描述,主要从属性和行为两个方面描述.   对于属性一般作成private , 行为作为public   函数 (1)构造函数,初始化所有的成员变量,系统自动调用,可以重 ...

  4. 推荐10款纯css3实现的实用按钮

    在2014年的双11即将来临之季,爱编程小编为大家整理10款纯css3实现的按钮.希望这对坚守在前端的码农们有所帮助.亲,如果你有好的资源也可在本文留言,让从事编码的程序员们抱团.工作更轻松. No1 ...

  5. php和js以及ts的传值

    egret是用ts写h5游戏,然后编译为js,有些数据想在加载时由服务端生成. 一种方法用网络请求,另外一种方法直接传值. 网络请求如果在运行中,有数据交互,其实是个比较好的选择. 而我只是在初始化时 ...

  6. 工厂模式——(Head first设计模式4)

    所谓工厂,肯定是和生产有关.工厂模式主要包括工厂方法模式和抽象工厂模式,有些人把简单工厂也作为一种模式,在本文我分别讨论简单工厂模式,工厂方法模式,抽象工厂模式.这些模式中同样也和生产有关.接下来,我 ...

  7. 【iOS】TableView的footerView不随cell滚动而停留在tableView底部的问题

    苹果官方给我提供TableView的FooterView和HeaderView停留在顶部的非常不错效果,有时候我们不须要这些FooterView和HeaderView停留在底部或者上部,如今就以Foo ...

  8. sparkStreaming 练习

    val updateFunc2 = (iter:Iterator[(String,Seq[Int],Option[Int])])=>{ iter.map{case (x,y,z) => / ...

  9. uboot在nandflash存储时内存和NandFlash存储空间

    硬件采用nandflash,nandflash为8位数据宽度,没有dataflash和norflash. Nandflash空间分配为 bootstrap + u-boot + env + linux ...

  10. NODE_PATH的疑难杂症(转)

    nodejs 中的 NODE_PATH 在使用 nodejs 开发中我们都免不了要去安装一些第三方模块. 那么你或多或少的遇到过以下一些问题 再继续阅读之前,我们先来弄清楚一个概念. npm inst ...