HDU - 5878 A - I Count Two Three H 技巧枚举
题意
输入 t (1≤t≤500000), the number of test cases. t test cases follow. Each test case provides one integer n (1≤n≤109).让我们不小于n的最小的x满足 x=2^a*3^b*5^c*7^d
分析
这道题其实就是个枚举
但是不能随便枚举
比如 如果向这样枚举的话
scanf("%lld",&n);for(ll i=n;;i++){ll tem = i;while(tem%2==0)tem/=2;while(tem%3==0)tem/=3;while(tem%5==0)tem/=5;while(tem%7==0)tem/=7;if(tem==1){printf("%lld\n",i);break;}}
那铁定是要TLE
case的数量是500000个 那平均输入数据都比较大 每个数据要差不多搜索1000个数才能找到我们所想要找的数的话 就会发现 这里500000*1000 = 500000000 关键有些数据还不会仅仅的查找1000次就找到
所以这样一定超时
我们看 既然枚举数字比较麻烦
我们如果枚举因子呢
我们已经知道 每个数的因子就是2,3,5,7
也就是说这个数一定能通过这四个数组合而成
如果我们通过枚举这四个因子的数量去做呢
比如这样
for(int f2=0;ff2<maxn;f2++,c++){f2==0?ff2*=1:ff2*=2;for(int f3 = 0;ff2*ff3<maxn;f3++,c++){f3==0?ff3*=1:ff3*=3;for(int f5=0;ff2*ff3*ff5<maxn;f5++,c++){f5==0?ff5*=1:ff5*=5;for(int f7=0;ff2*ff3*ff5*ff7<maxn;c++,f7++){f7==0?ff7*=1:ff7*=7;fac = ff2*ff3*ff5*ff7;if(fac<maxn)s.insert(fac);else break;}ff7=1;}ff5=1;}ff3=1;}
那可是快多了
也就是8万多次循环就完成了
代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn = 1e9+1;
int main()
{ll fac=1,ff,c=0;set<ll>s;ll ff2=1,ff3=1,ff5=1,ff7=1;for(int f2=0;ff2<maxn;f2++,c++){f2==0?ff2*=1:ff2*=2;for(int f3 = 0;ff2*ff3<maxn;f3++,c++){f3==0?ff3*=1:ff3*=3;for(int f5=0;ff2*ff3*ff5<maxn;f5++,c++){f5==0?ff5*=1:ff5*=5;for(int f7=0;ff2*ff3*ff5*ff7<maxn;c++,f7++){f7==0?ff7*=1:ff7*=7;fac = ff2*ff3*ff5*ff7;// cout<<fac<<endl;if(fac<maxn)s.insert(fac);else break;}ff7=1;}ff5=1;}ff3=1;}// cout<<c<<endl; 81510// cout<<s.size()<<endl; 7千多int t;scanf("%d",&t);while(t--){ll n;scanf("%lld",&n);printf("%lld\n",*(s.lower_bound(n)));}return 0;
}
HDU - 5878 A - I Count Two Three H 技巧枚举相关推荐
- 【HDU - 5878】I Count Two Three(打表)
题干: I will show you the most popular board game in the Shanghai Ingress Resistance Team. It all star ...
- HDU 5878 I Count Two Three
打表,二分. 满足条件的数字个数不多,可以全部找出来,排个序,每次询问的时候二分一下. #pragma comment(linker, "/STACK:1024000000,10240000 ...
- AC自动机 + 概率dp + 高斯消元 --- HDU 5955 or 2016年沈阳icpc H [AC自动机 + 概率dp + 高斯消元]详解
题目链接 题目大意: 就是有NNN个人,每个人都会猜一个长度为LLL的只包含{1,2,3,4,5,6}\{1,2,3,4,5,6\}{1,2,3,4,5,6}的序列,现在裁判开始投掷骰子,并且把每次的 ...
- 【HDU - 5056】Boring count (尺取法)
题干: You are given a string S consisting of lowercase letters, and your task is counting the number o ...
- Mysql中where 1=1 和count(0) 使用小技巧
1. 数据库语句 where 1=1 的用法和作用 这是一种怎样的查询语句呢?首先说明,1=1不是查询语句中的任何关键词,所以,请您放心,不管你会不会使用 这种语句,都没有任何关系,对于您而言,没有任 ...
- 【HDU - 2072 】单词数(字符串读入技巧,sstream大法,水题,字符串读入格式)
题干: lily的好朋友xiaoou333最近很空,他想了一件没有什么意义的事情,就是统计一篇文章里不同单词的总数.下面你的任务是帮助xiaoou333解决这个问题. Input 有多组数据,每组一行 ...
- HDU 6071 Lazy Running
链接HDU 6071 Lazy Running 给出四个点1,2,3,4,1和2,2和3,3和4,4和1之间有路相连,现在从2点出发,最后回到2点,要求路径大于等于\(K\),问路径长度最短是多少,\ ...
- HDU 1033 水题
题意还真的不好懂,摸索数据就出来了,注意顺时针和逆时针时候的方向变化 /* * Author:lonelycatcher * problem:hdu 1033 * Type:水题 */ #in ...
- hdu 1166 排兵布阵
/* *********************************************** Author :xryz Email :523689985@qq.com Created Time ...
最新文章
- python3 中递归的最大次数
- AHP层次分析法解决用户价值评估
- 龙芯.NET正式发布 开源共享与开发者共成长
- hd-sdi转hdmi转换器产品规格参数及接口定义详解
- 双足机器人简单步态生成
- php 初始化model,TP5 model类研究
- struts2权威指南学习笔记:struts2引入自定义库
- oracle数据库卡住了无法保存,Oracle数据库使用NFS存储,启动报错提示无法锁定文件...
- Proxy 对象简介
- 短信开发系列(二):GSM手机短信开发之短信解码
- 阿里云申请免费ssl证书并配置nginx
- ESL系统的Docker化部署
- 核电厂的“神经中枢”——核电厂数字化仪控系统
- python十六进制转为二进制_Python进制转换(二进制、十进制和十六进制)
- Python网络爬虫(2)- 爬虫翻译程序-含有道、金山、百度翻译
- 二叉树基础题(六):树的子结构二叉搜索树的判断镜像二叉树
- Linux 命令:realpath 命令
- 推荐一个全自动在线做gif进度条
- OpenCV4编译链接问题xxxx未定义的引用
- 启动print spooler 服务后, 自动停止, 服务不稳定的解决办法