[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
技术分享
 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 }
2

 

以上是关于[HDOJ5878]I Count Two Three(暴力枚举,二分)的主要内容,如果未能解决你的问题,请参考以下文章

HDU 5878 I Count Two Three

HDU 5878 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)

[HDOJ5791]Two(DP)