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 }

时间: 2024-12-20 14:44:29

hdu5878 I Count Two Three(二分+ 打表)的相关文章

I Count Two Three(打表+排序+二分查找)

I Count Two Three 二分查找用lower_bound 这道题用cin,cout会超时... AC代码: 1 /* */ 2 # include <iostream> 3 # include <cstring> 4 # include <string> 5 # include <cstdio> 6 # include <cmath> 7 # include <algorithm> 8 using namespace st

HDU5726 GCD(二分+ST表)

题目大概说给一个包含n个数的序列,多次询问有多少个区间GCD值等于某个区间的gcd值. 任何一个区间不同的GCD个数是log级别的,因为随着右端点向右延伸GCD是单调不增的,而每次递减GCD至少除以2. 考虑固定左端点,最多就nlogn种GCD,可以直接把所有区间GCD值预处理出来,用map存储各种GCD值的个数,查询时直接输出. 具体是这样处理的:枚举左端点,进行若干次二分查找,看当前GCD值最多能延伸到哪儿,进而统计当前GCD值的数量. 而求区间GCD,用ST表,预处理一下,就能在O(1)时

BZOJ 3230 相似子串 | 后缀数组 二分 ST表

BZOJ 3230 相似子串 题面 题解 首先我们要知道询问的两个子串的位置. 先正常跑一遍后缀数组并求出height数组. 对于每一个后缀suffix(i),考虑以i开头的子串有多少是之前没有出现过的,也就是考虑左端点在i.右端点在什么范围内时这个子串没有出现过--答案是右端点在[i + height[i] - 1, n]范围内时这个子串没出现过,即右端点在没有被"i与排在前一个的后缀的公共前缀"覆盖的部分时,这个子串没有出现过. 那么我们记录以每个i开头的新子串的数量,求前缀和,然

hdu 6704 K-th occurrence 二分 ST表 后缀数组 主席树

我们考虑,一个子串必定是某个后缀的前缀. 排序相邻的后缀他们的前缀一定最相似. 所以全部的一种子串必定是一些排序相邻的后缀的公共前缀. 从l开始的子串,则从rank[l]开始看,两侧height保证大于子串长度,能延伸多长,则证明有多少个这种子串. 我们用ST表维护出height的最小值,然后通过最小值二分即可,边界有些棘手. 然后我们就得到了一个height不小于子串长度的连续区间,这个区间是以原后缀的字典序排序的. 而同时,sa数组下标为排序,值为原串位置. 所以我们对这个区间在sa数组上做

关于数据库优化1——关于count(1),count(*),和count(列名)的区别,和关于表中字段顺序的问题

1.关于count(1),count(*),和count(列名)的区别 相信大家总是在工作中,或者是学习中对于count()的到底怎么用更快.一直有很大的疑问,有的人说count(*)更快,也有的人说count(列名)更快,那到底是谁更快,我将会在本文中详细介绍一下到底是count(1),count(*)和count(列明)的区别,和更适合的使用场景. 往常在工作中有人会说count(1)比count(*)会快,或者相反,首先这个结论肯定是错的,实际上count(1)和count(*)并没有区别

CF1190E Tokitsukaze and Explosion 二分、贪心、倍增、ST表

传送门 最小值最大考虑二分答案,不难发现当最小值\(mid\)确定之后,原点到所有直线的距离一定都是\(mid\)时才是最优的,也就是说这些直线一定都是\(x^2+y^2=mid^2\)的切线. 接下来考虑一个点会被哪些切线所保护.作出这个点到圆的公切线,得到两个切点,那么在这两个切点之间的优弧上选择一个点,以它为切点的切线就可以保护当前点.也就是说能够保护一个点的切线的切点在圆上表现为一段角度的区间.可以用解析几何计算出这个角度的区间. 接下来需要在\([-\pi , \pi]\)上选择不超过

查询和删除表中重复数据sql语句

  1.查询表中重复数据.select * from peoplewhere peopleId in (select   peopleId   from   people   group   by   peopleId   having   count(peopleId) > 1)2.删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录delete from people where peopleId   in (select   peopleId

线性表的链式存储——C语言实现

SeqList.h #ifndef _WBM_LIST_H_ #define _WBM_LIST_H_ typedef void List; typedef void ListNode; //创建并且返回一个空的线性表 List* List_Create(); //销毁一个线性表list void List_Destroy(List* list); //将一个线性表list中的所有元素清空, 线性表回到创建时的初始状态 void List_Clear(List* list); //返回一个线性表

表视图搜索栏

一.效果 1. 启动程序:上面搜索栏.右边索引条 2. 点击表单元有警告框提示 3. 点击搜索栏输入内容可根据长短范围搜索 二.分析 1. 创建一个表视图,指定委托,实现表单元的显示 2. 创建一个显示搜索结果的模型,该模型也是表视图,遵循搜索结果更新协议,作为更新器 3. 创建一个搜索控制器,指定搜索结果控制器,并创建搜索栏,让搜索结果控制器实现同步更新协议,让搜索到的内容得以在搜索结果中更新 4. 在更新协议实现方法中配置搜索的逻辑 三.实现 1. 实现文件 2. Main.storyboa