[HDOJ5878]I Count Two Three(暴力枚举,二分)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[HDOJ5878]I Count Two Three(暴力枚举,二分)相关的知识,希望对你有一定的参考价值。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5878
两种做法
1 #include <algorithm> 2 #include <iostream> 3 #include <iomanip> 4 #include <cstring> 5 #include <climits> 6 #include <complex> 7 #include <fstream> 8 #include <cassert> 9 #include <cstdio> 10 #include <bitset> 11 #include <vector> 12 #include <deque> 13 #include <queue> 14 #include <stack> 15 #include <ctime> 16 #include <set> 17 #include <map> 18 #include <cmath> 19 using namespace std; 20 #define fr first 21 #define sc second 22 #define cl clear 23 #define BUG puts("here!!!") 24 #define W(a) while(a--) 25 #define pb(a) push_back(a) 26 #define Rint(a) scanf("%d", &a) 27 #define Rll(a) scanf("%I64d", &a) 28 #define Rs(a) scanf("%s", a) 29 #define Cin(a) cin >> a 30 #define FRead() freopen("in", "r", stdin) 31 #define FWrite() freopen("out", "w", stdout) 32 #define Rep(i, len) for(int i = 0; i < (len); i++) 33 #define For(i, a, len) for(int i = (a); i < (len); i++) 34 #define Cls(a) memset((a), 0, sizeof(a)) 35 #define Clr(a, x) memset((a), (x), sizeof(a)) 36 #define Full(a) memset((a), 0x7f7f7f, sizeof(a)) 37 #define lrt rt << 1 38 #define rrt rt << 1 | 1 39 #define pi 3.14159265359 40 #define RT return 41 #define lowbit(x) x & (-x) 42 #define onecnt(x) __builtin_popcount(x) 43 typedef long long LL; 44 typedef long double LD; 45 typedef unsigned long long ULL; 46 typedef pair<int, int> pii; 47 typedef pair<string, int> psi; 48 typedef pair<LL, LL> pll; 49 typedef map<string, int> msi; 50 typedef vector<int> vi; 51 typedef vector<LL> vl; 52 typedef vector<vl> vvl; 53 typedef vector<bool> vb; 54 55 const int maxn = 33; 56 int n; 57 int x2[maxn], x3[maxn], x5[maxn], x7[maxn]; 58 vector<int> ret; 59 60 signed main() { 61 // FRead(); 62 Cls(x2); Cls(x3); Cls(x5); Cls(x7); ret.clear(); 63 x2[0] = 1; x3[0] = 1; x5[0] = 1; x7[0] = 1; 64 x2[1] = 2; x3[1] = 3; x5[1] = 5; x7[1] = 7; 65 ret.push_back(1); 66 ret.push_back(2); 67 ret.push_back(3); 68 ret.push_back(5); 69 ret.push_back(7); 70 For(i, 2, 31) { 71 x2[i] = x2[i-1] * 2; 72 x3[i] = x3[i-1] * 3; 73 x5[i] = x5[i-1] * 5; 74 x7[i] = x7[i-1] * 7; 75 } 76 For(a, 0, 31) { 77 For(b, 0, 31) { 78 For(c, 0, 31) { 79 For(d, 0, 31) { 80 int tmp = x2[a]*x3[b]*x5[c]*x7[d]; 81 if(tmp > 0 && tmp <= 1000000000LL) { 82 ret.push_back(tmp); 83 } 84 } 85 } 86 } 87 } 88 sort(ret.begin(), ret.end()); 89 int T; 90 Rint(T); 91 W(T) { 92 scanf("%I64d", &n); 93 printf("%I64d\n", *lower_bound(ret.begin(), ret.end(), n)); 94 } 95 RT 0; 96 }
1 #include <algorithm> 2 #include <iostream> 3 #include <iomanip> 4 #include <cstring> 5 #include <climits> 6 #include <complex> 7 #include <fstream> 8 #include <cassert> 9 #include <cstdio> 10 #include <bitset> 11 #include <vector> 12 #include <deque> 13 #include <queue> 14 #include <stack> 15 #include <ctime> 16 #include <set> 17 #include <map> 18 #include <cmath> 19 using namespace std; 20 #define fr first 21 #define sc second 22 #define cl clear 23 #define BUG puts("here!!!") 24 #define W(a) while(a--) 25 #define pb(a) push_back(a) 26 #define Rint(a) scanf("%d", &a) 27 #define Rll(a) scanf("%I64d", &a) 28 #define Rs(a) scanf("%s", a) 29 #define Cin(a) cin >> a 30 #define FRead() freopen("in", "r", stdin) 31 #define FWrite() freopen("out", "w", stdout) 32 #define Rep(i, len) for(int i = 0; i < (len); i++) 33 #define For(i, a, len) for(int i = (a); i < (len); i++) 34 #define Cls(a) memset((a), 0, sizeof(a)) 35 #define Clr(a, x) memset((a), (x), sizeof(a)) 36 #define Full(a) memset((a), 0x7f7f7f, sizeof(a)) 37 #define lrt rt << 1 38 #define rrt rt << 1 | 1 39 #define pi 3.14159265359 40 #define RT return 41 #define lowbit(x) x & (-x) 42 #define onecnt(x) __builtin_popcount(x) 43 typedef long long LL; 44 typedef long double LD; 45 typedef unsigned long long ULL; 46 typedef pair<int, int> pii; 47 typedef pair<string, int> psi; 48 typedef pair<LL, LL> pll; 49 typedef map<string, int> msi; 50 typedef vector<int> vi; 51 typedef vector<LL> vl; 52 typedef vector<vl> vvl; 53 typedef vector<bool> vb; 54 55 inline bool scan_d(LL &num) { 56 char in;bool IsN=false; 57 in=getchar(); 58 if(in==EOF) return false; 59 while(in!=‘-‘&&(in<‘0‘||in>‘9‘)) in=getchar(); 60 if(in==‘-‘){ IsN=true;num=0;} 61 else num=in-‘0‘; 62 while(in=getchar(),in>=‘0‘&&in<=‘9‘){ 63 num*=10,num+=in-‘0‘; 64 } 65 if(IsN) num=-num; 66 return true; 67 } 68 69 const int maxn = 33; 70 LL n; 71 LL k[5] = {2,3,5,7}; 72 vector<LL> ret; 73 74 void dfs(LL cur, int depth) { 75 if(depth == 4) ret.push_back(cur); 76 else { 77 for(LL i = 1; cur * i <= 1000000000LL; i *= k[depth]) { 78 dfs(LL(cur*i), depth+1); 79 } 80 } 81 } 82 83 signed main() { 84 // FRead(); 85 int T; 86 Rint(T); 87 dfs(1LL, 0); 88 sort(ret.begin(), ret.end()); 89 W(T) { 90 scan_d(n); 91 printf("%I64d\n", *lower_bound(ret.begin(), ret.end(), n)); 92 } 93 RT 0; 94 }
以上是关于[HDOJ5878]I Count Two Three(暴力枚举,二分)的主要内容,如果未能解决你的问题,请参考以下文章
hdu5878 I Count Two Three(二分+ 打表)
HDU 5878 I Count Two Three (打表+二分查找) -2016 ICPC 青岛赛区网络赛
hdu 5878 I Count Two Three (2016 ACM/ICPC Asia Regional Qingdao Online 1001)