POJ-1465(同余+高精度)
来源:互联网 发布:免费提词器软件 编辑:程序博客网 时间:2024/05/19 21:42
其实很简单的思想,外加贴一个模版
【题目描述】给一个数N 然后给M个一位数 问你是否有N的倍数 完全由这些一位数组成
先说算法 用BFS不停的扩展 就是X10这样的扩展 然后如果对N取余的余数没有出现过就把这个扩展得数的余数添加到队列里 如果余数是0的话就可以输出了
当然 扩展的时候要考虑到0,这些都不是最关键的 最关键的是这个数可能非常大 long long 不够 而高精的话比较麻烦。用链表。
还有一点 这个队列最多只有5000就够了。
另外 不需要证明所有的余数都取到了 没有必要
/******************************************************************************************************
** Copyright (C) 2011.07.01-2013.07.01 ** Author: famousDT <13730828587@163.com> ** Edit date: 2012-03-11******************************************************************************************************/#include <stdio.h>#include <stdlib.h>//abs,atof(string to float),atoi,atol,atoll#include <math.h>//atan,acos,asin,atan2(a,b)(a/b atan),ceil,floor,cos,exp(x)(e^x),fabs,log(for E),log10#include <vector>#include <queue>#include <deque>//two direction queue#include <map>#include <time.h>#include <set>#include <list>#include <stack> #include <string>#include <iostream>#include <fstream>#include <assert.h>#include <bitset>#include <iterator>//C++Primer#include <string.h>//memcpy(to,from,count#include <ctype.h>//character process:isalpha,isdigit,islower,tolower,isblank,iscntrl,isprll#include <numeric>#include <utility>//pair#include <functional>#include <algorithm>using namespace std;typedef long long int ll;#define MY_E exp(1.0)#define MY_PI acos(-1.0)#define MY_MAX(a, b) ((a) > (b) ? (a) : (b))#define MY_MIN(a, b) ((a) < (b) ? (a) : (b))#define MY_MALLOC(n, type) ((type *)malloc((n) * sizeof(type)))#define MY_ABS(a) (((a) >= 0) ? (a) : (-(a)))#define MY_INT_MAX 0x7fffffff#define CLEAR(a) memset(a, 0, sizeof(a))/*==========================================================*\| \*==========================================================*/ #define N 5000 + 5struct node{int res; //余数int digit; //位数node *pre;} q[N];bool hash[N];void output(node x){if (x.pre) {output(*x.pre);printf("%d", x.digit);}}void bfs(int n, int m, int d[]){int i, j;CLEAR(hash);int front = 0, rear = 1;q[0].pre = NULL;q[0].digit = q[0].res = 0;node * first = &q[0];while (front < rear) {node now, curr = q[front];now.pre = &q[front];for (i = 0; i < m; ++i) {int res = (curr.res * 10 + d[i]) % n;if (hash[res] == 0 && (now.pre != first || d[i] > 0)) {hash[res] = true;now.res = res;now.digit = d[i];q[rear++] = now;if (now.res == 0) {output(now);printf("\n");return;}}}++front;}printf("0\n");}int main(){int m, n;int d[15];int i;while (scanf("%d%d", &n, &m) == 2) {for (i = 0; i < m; ++i)scanf("%d", &d[i]);if (!n) {printf("0\n");continue;}sort(d, d + m);bfs(n, m, d);}return 0;}
- POJ-1465(同余+高精度)
- The Embarrassed Cryptographer POJ 2635 数论之高精度求模(同余模定理+千进制)
- POJ 2635 The Embarrassed Cryptographer(高精度取模 + 同余模定理)
- POJ 3844(同余)
- POJ 2635 The Embarrassed Cryptographer [高精度求余+同余模定理]【数论】
- POJ 1465 Multiple(BFS+同余剪枝)
- POJ 1465 Multiple(BFS+同余剪枝)
- POJ 1465 Multiple (BFS,同余定理)
- POJ--1465--Multiple【BFS+同余定理】
- POJ-1465-bfs,同余剪枝
- poj 1061(线性同余方程。。。。)
- POJ 2115(线性同余方程)
- poj-2635(同余模运算)
- POJ 2635(同余定理)
- POJ 1426 (BFS + 同余定理)
- poj 2551 Ones(同余)
- poj 2769 同余
- POJ 2635-The Embarrassed Cryptographer(高精度求模+同余模定理)
- php中如何使用KindEditor编辑器
- lua作为配置文件的读取方法
- 矩阵乘法的并行化改造
- 吃鸡蛋也有大讲究
- HDUOJ 2050
- POJ-1465(同余+高精度)
- Android学习不错的资源
- 虚拟机安装Oracle + 本机安装Oracle客户端进行访问
- 模拟键盘 keybord
- Interface+工厂方法设计模式
- 运行Eclipse plugin时java.lang.NoClassDefFoundError
- Linux查看目录信息命令
- Cairngorm
- HDOJ Robberies 01背包