hdu5878 I Count Two Three(二分+ 打表)

题目链接:hdu5878 I Count Two Three

题意:给出一个整数n, 找出一个大于等于n的最小整数m, 使得m可以表示为2^a * 3^b * 5^c * 7^d​​.

题解:打表预处理出所有满足要求的数,排个序然后二分查找解决。

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 typedef long long ll;
 5 const int N = 1e9;
 6 ll s[10000];
 7 ll pow(ll a, ll b){
 8     ll r = 1;
 9     while(b){
10         if(b & 1)
11             r *= a;
12         a *= a;
13         b >>= 1;
14     }
15     return r;
16 }
17 int cnt;
18 void init(){
19     ll i, j, k ,l, t;
20     cnt = 0;
21     for(i = 0; i < 31; ++i){
22         for(j = 0; j < 20 ; ++j){
23             for(k = 0 ;k < 14 ; ++k){
24                 for(l = 0; l < 12; ++l){
25                     t = pow(2, i) * pow(3, j);
26                     if(t > 1e9)
27                         break;
28                     t *= pow(5, k);
29                     if(t > 1e9)
30                         break;
31                     t *=pow(7, l);
32                     if(t > 1e9)
33                         break;
34                     s[cnt++] = t;
35                 }
36             }
37         }
38     }
39     sort(s, s + cnt);
40 }
41 void bi_search(int n){
42     int l = 0,r = cnt - 1;
43     while(l < r){
44         int mid = l + (r - l)/2;
45         if(s[mid] >= n)
46             r = mid;
47         else
48             l = mid + 1;
49     }
50     printf("%I64d\n", s[l]);
51 }
52 int main(){
53     int t, n;
54     scanf("%d", &t);
55     init();
56     while(t--){
57         scanf("%d", &n);
58         bi_search(n);
59     }
60     return 0;
61 }
View Code

 

posted @ 2016-09-18 19:41  GraceSkyer  阅读(542)  评论(0编辑  收藏  举报

~~~~~~ACM大牛语录,激励一下~~~~~~

为了世界的和平,为了女生的安全,我拼命做题,做题,做题!

用最短的时间,刷最多的题!

给我一滴泪,我就看到了你全部的海洋!

seize the hour, seize the day.

人生难免有无奈,幸福走远了,或是感叹幸福来迟了.其实我一直相信,无论手中的幸福是多么微不足道的感觉,我会把握住那每一分,每一秒,当幸福依旧像那百鸟般飞逝,终究无法掌握时,我会感谢它,曾经降临过!

A自己的题,让别人郁闷去吧

WA肠中过,AC心中留 TLE耳边过,AC特别牛

天然的悲苦和伤逝,过去有过,以后还会有

^*^一步一步往上爬^*^

AC就像练级,比赛就像PK. 练级不如PK好玩

其实,世上本没有ACM,AC的人多了,也便有了!

AC无止尽~ Seek you forever~

找呀找呀找水题,找到一个AC一个呀!

AC是检验程序的唯一标准。

真的猛士,敢于直面惨淡的人生,敢于正视淋漓的鲜血……