首页 > 代码库 > [HDOJ5878]I Count Two Three(暴力枚举,二分)

[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 first21 #define sc second22 #define cl clear23 #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 >> a30 #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 << 138 #define rrt rt << 1 | 139 #define pi 3.1415926535940 #define RT return41 #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 first21 #define sc second22 #define cl clear23 #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 >> a30 #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 << 138 #define rrt rt << 1 | 139 #define pi 3.1415926535940 #define RT return41 #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(暴力枚举,二分)