Time Limit: 1000MS | Memory Limit: 10000K | |||
Total Submissions: 6690 | Accepted: 2809 | Special Judge |
Description
Input
Output
Sample Input
2 6 19 0
Sample Output
10 100100100100100100 111111111111111111
//BFS
//BFS #include <cstdlib> #include <iostream> #include <cstdio> using namespace std; const int MAX = 1100000; __int64 BFS(__int64 queue[], int value) { int head = 0, tail = 0; __int64 temp = 0; queue[tail++] = 1; while(head != tail) { __int64 temp = queue[head++]; if(temp % value == 0) return temp; queue[tail++] = temp * 10; //push left child and right child into queue queue[tail++] = temp * 10 + 1; } } int main(int argc, char *argv[]) { int value; while(scanf("%d", &value) && value != 0) { __int64 queue[MAX]; printf("%I64d/n", BFS(queue, value)); } return EXIT_SUCCESS; }
对于那个大数组queue, 如果在声明的时候初始化, 就TLE, 去掉后125ms...
//DFS
#include <cstdio> #include <cstdlib> using namespace std; const int MAX = 201; int queue[MAX]; bool isFind; void display(int count) { for(int i=0; i<count; i++) printf("%d", queue[i]); printf("/n"); } void DFS(int value, int deep, int rem) { if(!isFind && deep < 100) { if(rem == 0) { isFind = true; display(deep); } else { queue[deep] = 0; //handle left child DFS(value, deep + 1, (10 * rem) % value); queue[deep] = 1; //handle right child DFS(value, deep + 1, (10 * rem + 1) % value); } } } int main(int argc, char *argv[]) { int value; while(scanf("%d", &value) && value != 0) { isFind = false; queue[0] = 1; DFS(value, 1, 1); } }