HDU5878(打表)

I Count Two Three

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 348    Accepted Submission(s): 184

Problem Description

I will show you the most popular board game in the Shanghai Ingress Resistance Team.
It all started several months ago.
We found out the home address of the enlightened agent Icount2three and decided to draw him out.
Millions of missiles were detonated, but some of them failed.

After the event, we analysed the laws of failed attacks.
It‘s interesting that the i-th attacks failed if and only if i can be rewritten as the form of 2a3b5c7d which a,b,c,d are non-negative integers.

At recent dinner parties, we call the integers with the form 2^a3^b5^c7^d "I Count Two Three Numbers".
A related board game with a given positive integer n from one agent, asks all participants the smallest "I Count Two Three Number" no smaller than n.

Input

The first line of input contains an integer t (1≤t≤500000), the number of test cases. t test cases follow. Each test case provides one integer n (1≤n≤109).

Output

For each test case, output one line with only one integer corresponding to the shortest "I Count Two Three Number" no smaller than n.

Sample Input

10

1

11

13

123

1234

12345

123456

1234567

12345678

123456789

Sample Output

1

12

14

125

1250

12348

123480

1234800

12348000

123480000

Source

2016 ACM/ICPC Asia Regional Qingdao Online

枚举a,b,c,d,打表,二分查找

 1 //2016.9.17
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <algorithm>
 5 #define N 10000
 6 #define ll long long
 7
 8 using namespace std;
 9
10 int arr[N];
11
12 ll pow(ll a, ll b)//快速幂
13 {
14     ll ans = 1;
15     while(b)
16     {
17         if(b & 1)ans *= a;
18         a *= a;
19         b>>=1;
20     }
21     return ans;
22 }
23
24 int main()
25 {
26     ll tmp; int cnt = 0;
27     for(int a = 0; a < 31; a++)
28     {
29         for(int b = 0; b < 20; b++)
30         {
31             for(int c = 0; c < 14; c++)
32             {
33                 for(int d = 0; d < 12; d++)
34                 {
35                     tmp = pow(2, a)*pow(3, b);
36                     if(tmp > 1e9)break;
37                     tmp *= pow(5, c);
38                     if(tmp > 1e9)break;
39                     tmp *= pow(7, d);
40                     if(tmp > 1e9)break;
41                     arr[cnt++] = tmp;
42                 }
43             }
44         }
45     }
46     sort(arr, arr+cnt);
47     int T, n;
48     scanf("%d", &T);
49     while(T--)
50     {
51         scanf("%d", &n);
52         int pos = lower_bound(arr, arr+cnt, n)-arr;
53         printf("%d\n", arr[pos]);
54     }
55
56     return 0;
57 }
时间: 2024-10-10 15:27:56

HDU5878(打表)的相关文章

2016 ACM/ICPC Asia Regional Qingdao Online 1001/HDU5878 打表二分

I Count Two Three Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 782    Accepted Submission(s): 406 Problem Description I will show you the most popular board game in the Shanghai Ingress Resis

hdu5878(枚举,打表)

题目链接:hdu5878 题意:到一行输入t,表示下面有t组数据,然后下面t行每行输入一个数n; 定义x==2^a*3^b*5^c*7^d(a, b, c, d为自然数,x不大于1e+9): 要求对于每一个n输出>=n的最小x: 思路:由于x比较大,可以先打个表: 依次枚举a,b,c,d将所有不大于1e+9的x存到数组a中,再用:lower_bound()找一下即可: 代码: #include<bits/stdc++.h>#define MAXN 10000#define MAX 100

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[100

Oracle 10g通过创建物化视图实现不同数据库间表级别的数据同步

摘自:http://blog.csdn.net/javaee_sunny/article/details/53439980 目录(?)[-] Oracle 10g 物化视图语法如下 实例演示 主要步骤 在A节点创建原表和物化视图日志 在B节点创建连接A节点的远程链接 在B节点处创建目标表和与目标表名称相同的物化视图 在B节点处刷新物化视图 升级采用存储过程定时任务JOB方式定时刷新物化视图 进一步优化 文章更新记录 参考文章 Oracle 10g 物化视图语法如下: create materia

SqlServer给一个表增加多个字段语法

添加字段语法 alter table table_name add column_name +字段类型+ 约束条件 给一个表增加多个字段: use NatureData go alter table XunHu add MaleCount varchar(50) null, FemaleCount varchar(50) null, SubadultCount varchar(50) null, LarvaeCount varchar(50) null, TraceType varchar(50

凯撒密码、GDP格式化输出、99乘法表

1凯撒密码加密plaincode=input('请输入明文:')print('密文:',end='')for i in plaincode:print(chr(ord(i)+3),end='') 2.国家名称 GDP总量(人民币亿元) 中国 ¥765,873.4375澳大利亚 ¥ 78,312.4375 print('国家名称 GDP总量(人民币亿元)')print('{0:''<12}¥{1:''>10,.2f}'.format('中国',765873.4375))print('{0:''&

c打印9*9乘法表

c打印9*9乘法表(这里提供了两种打印方法).乘号两边有规律可寻,其左边递减,右边递增. 1 #include <stdio.h> 2 int main() 3 { 4 int i, j, result; 5 for (i = 9; i >= 1; i--) //外层循环,从9开始,每次循环自减1 6 { 7 for (j = 1; j <= i; j++) //内层循环,从1开始,每次循环自加1 8 { 9 result = i*j; 10 printf("%d*%d=

MySQL(九)之数据表的查询详解(SELECT语法)二

上一篇讲了比较简单的单表查询以及MySQL的组函数,这一篇给大家分享一点比较难得知识了,关于多表查询,子查询,左连接,外连接等等.希望大家能都得到帮助! 在开始之前因为要多表查询,所以搭建好环境: 1)创建数据表suppliers 前面已经有一张表是book表,我们在建立一张suppliers(供应商)表和前面的book表对应. 也就是说 让book中s_id字段值指向suppliers的主键值,创建一个外键约束关系. 其实这里并没有达到真正的外键约束关系,只是模拟,让fruits中的s_id中

C# 远程服务器 安装、卸载 Windows 服务,读取远程注册表,关闭杀掉远程进程

这里安装windows服务我们用sc命令,这里需要远程服务器IP,服务名称.显示名称.描述以及执行文件,安装后需要验证服务是否安装成功,验证方法可以直接调用ServiceController来查询服务,也可以通过远程注册表来查找服务的执行文件:那么卸载文件我们也就用SC命令了,卸载后需要检测是否卸载成功,修改显示名称和描述也用sc命令.至于停止和启动Windows服务我们可以用sc命令也可以用ServiceController的API,当停止失败的时候我们会强制杀掉远程进程,在卸载windows