设为首页 加入收藏

TOP

ZOJ - 1136 Multiple (同余+BFS)
2015-07-20 17:49:11 来源: 作者: 【 】 浏览:1
Tags:ZOJ 1136 Multiple 同余 BFS

Description

a program that, given a natural number N between 0 and 4999 (inclusively), and M distinct decimal digits X1,X2..XM (at least one), finds the smallest strictly positive multiple of N that has no other digits besides X1,X2..XM (if such a multiple exists).

The input file has several data sets separated by an empty line, each data set having the following format:

On the first line - the number N
On the second line - the number M
On the following M lines - the digits X1,X2..XM.

For each data set, the program should write to standard output on a single line the multiple, if such a multiple exists, and 0 otherwise.

An example of input and output:


Input

22
3
7
0
1

2
1
1


Output

110

0

题意:让你用m个数组成n的倍数,要求最小

思路:首先我们排序这m个数,然后从高位开始搜,这样才能保证最先BFS的是最小的,这里用到了一个剪枝就是对于:余数相同的,我们可以拿来判重,小的比较优,也就是最先放进队列的比较优

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        using namespace std; const int maxn = 10005; struct Node { int res; int pre; int digit; } q[maxn]; int a[maxn], vis[maxn]; int n, m; void print(int u) { if (q[u].pre == -1) return; print(q[u].pre); printf("%d", q[u].digit); } int bfs() { q[0].digit = 0; q[0].pre = -1; q[0].res = 0; memset(vis, 0, sizeof(vis)); int front = 0, rear = 1; while (front < rear) { Node tmp = q[front]; for (int i = 0; i < m; i++) { int t = (tmp.res * 10 + a[i]) % n; if (a[i] == 0 && tmp.pre == -1) continue; if (!vis[t]) { vis[t] = 1; Node tmp; tmp.digit = a[i]; tmp.pre = front; tmp.res = t; q[rear++] = tmp; } if (t == 0) { print(rear-1); printf("\n"); return 1; } } front++; } return 0; } int main() { while (scanf("%d%d", &n, &m) != EOF) { for (int i = 0; i < m; i++) scanf("%d", &a[i]); if (n == 0) { printf("0\n"); continue; } sort(a, a+m); if (!bfs()) printf("0\n"); } return 0; }
      
     
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ1144 Network(判断割点) 下一篇ZOJ 2588 Burning Bridges(判断..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Announcing October (2025-12-24 15:18:16)
·MySQL有什么推荐的学 (2025-12-24 15:18:13)
·到底应该用MySQL还是 (2025-12-24 15:18:11)
·进入Linux世界大门的 (2025-12-24 14:51:47)
·Download Linux | Li (2025-12-24 14:51:44)