2015 HDU 多校联赛 5317 RGCDQ 筛法求解
题目 http://acm.hdu.edu.cn/showproblem.php?
pid=5317
本题的数据量非常大,測试样例多。数据量大, 所以必须做预处理。也就是用筛法求出全部的F[x],将全部F[x] 打印出来发现。事实上结果不大,最大的数值是7。所以对于每一个区间询问, 直接暴力求取有多少个 1 2 3 4 5 6 7 就可以,从大到小查找。假设出现2个以上 3-7 的数值,那么最大公约数就是该数字。
假设没有出现两个反复的。那么结果要么是 3 (3,6) 要么是 2 (2,4)。 (4。 6), (2,6) 。假设都不是。那么就是 1。
我认为本题主要难点在筛法求F[x] 上。
#include <bits/stdc++.h> using namespace std; const int MAX = 1000000+2;
bool vis[MAX];
int f[MAX];
int s[8][MAX]; inline void init() // O(nlngn)
{
// 素数筛法 获取 f(x)
for(int i=2; i<MAX; ++i)
{
if (!vis[i]) // 没有被筛去
{
f[i]++; // 自身是素数,自增 // 筛去i的倍数。 同一时候将f[i的倍数]++。由于i的倍数值,肯定含有i 这个质因子
for(int j=i+i; j<MAX; j+=i)
{
f[j]++;
vis[j] = true; // 筛去
}
}
} // 统计区间 2-i 各有多少个 1 2 3 4 5 6 7
for(int i=2; i<MAX; ++i)
{
for(int j=1; j<=7; ++j)
{
s[j][i] = s[j][i-1]; // 取上一次的结果
if (f[i] == j) // 当前值能够进行累加
s[j][i]++;
}
}
} inline int getMaxGCD(int l, int r)
{
int arr[8] = {};
for(int i=1; i<=7; ++i)
{
arr[i] = s[i][r] - s[i][l-1];
} // 是否有2个以上的情况
for(int i=7; i>2; --i)
{
if (arr[i] >= 2)
return i;
} // 处理单个的情况
if (arr[3]+arr[6] >= 2)
return 3; if (arr[2]+arr[4]+arr[6] >= 2)
return 2; return 1;
} int main(void)
{
//freopen("in.txt", "r", stdin); init(); int t = 0;
scanf("%d", &t);
while(t--)
{
int l, r;
scanf("%d%d", &l, &r);
printf("%d\n", getMaxGCD(l, r));
} return 0;
}
另外在杭电上。也有一道类似的题目, 主要考察筛法。
题目 http://acm.hdu.edu.cn/showproblem.php?pid=1215
// 数据量特别大,一定要做预处理 #include <bits/stdc++.h> using namespace std; const int MAX = 500000+2;
int ans[MAX] = {}; inline void init()
{
ans[1] = 1;
for(int i=2; i<MAX; ++i)
{
ans[i]++;
for(int j=i+i; j<MAX; j+=i)
{
ans[j] += i;
}
}
} int main(void)
{
//freopen("in.txt", "r", stdin); init(); int t, n;
cin>>t;
while(t--)
{
scanf("%d", &n);
printf("%d\n", ans[n]);
} return 0;
}
測试用例数量非常大且数据量大的时候。应该做预处理
2015 HDU 多校联赛 5317 RGCDQ 筛法求解的更多相关文章
- 2015 HDU 多校联赛 5363 Key Set
2015 HDU 多校联赛 5363 Key Set 题目: http://acm.hdu.edu.cn/showproblem.php? pid=5363 依据前面给出的样例,得出求解公式 fn = ...
- 数学+dp HDOJ 5317 RGCDQ
题目传送门 /* 题意:给一个区间,问任意两个数的素数因子的GCD最大 数学+dp:预处理出f[i],发现f[i] <= 7,那么用dp[i][j] 记录前i个f[]个数为j的数有几个, dp[ ...
- 2018 HDU多校第四场赛后补题
2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...
- 2018 HDU多校第三场赛后补题
2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...
- [HDU多校]Ridiculous Netizens
[HDU多校]Ridiculous Netizens 点分治 分成两个部分:对某一点P,连通块经过P或不经过P. 经过P采用树形依赖背包 不经过P的部分递归计算 树型依赖背包 v点必须由其父亲u点转移 ...
- HDU 5317 RGCDQ(素数个数 多校2015啊)
题目链接:pid=5317" target="_blank">http://acm.hdu.edu.cn/showproblem.php?pid=5317 Prob ...
- hdu 5317 RGCDQ (2015多校第三场第2题)素数打表+前缀和相减求后缀(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5317 题意:F(x) 表示x的不同质因子的个数结果是求L,R区间中最大的gcd( F(i) , F(j ...
- HDU OJ 5317 RGCDQ( 2015多校联合训练第3场) 暴力打表+小技巧
题目连接:Click here 题意:在一个[L,R]内找到最大的gcd(f[i],f[j])其中L<=i<j<=R,f[x]表示i分解质因数后因子的种类数.eg:f[10]=2(1 ...
- 2015 Multi-University Training Contest 3 hdu 5317 RGCDQ
RGCDQ Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
随机推荐
- javascript比较两个时间大小
//var yourtime=document.getElementById('begin_time').value; var yourtime='2010-12-10 11:12'; yourtim ...
- combogrid 摘要
可装载组合框 - ComboBox 继承自$.fn.combo.defaults,通过$.fn.combobox.defaults覆盖默认值 combobox显示的是一个可以编辑的文本框和一个下拉列表 ...
- Python学习(一)安装、环境配置及IDE推荐
Python的安装.环境配置及IDE推荐 官网:https://www.python.org/ 版本:2.x 和 3.x 差别较大:python3是不向下兼容:版本区别可参考网官网介绍 至于选择 Py ...
- mongodb pymongo.errors.CursorNotFound: Cursor not found, cursor id: 82792803897
默认 mongo server维护连接的时间窗口是十分钟 默认 单次从 server获取数据是101条或者 大于1M小于16M的数据 所以默认情况下,如果10分钟内未能处理完数据,则抛出该异常. 解决 ...
- Oracle数据库导入dmp文件报错处理方法
在向oracle数据库执行导入命令的时候报错,错误如下,大概意思是TNS中找不到服务名 下面说一下解决步骤 1:进入oracle用户,使用cat查看.bash_profile文件,找到ORACLE_H ...
- T_SQL的 FOR XML PATH 用法
T_SQL的 FOR XML PATH FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活 ...
- CPU五级流水线project(带Hazard)
project简单介绍: 计算机组成原理课程Project--五级流水线hazard处理 思路说明: CPU架构图: CPU指令集: 代码在这里:cpu_hazard
- Leet Code OJ 219. Contains Duplicate II [Difficulty: Easy]
题目: Given an array of integers and an integer k, find out whether there are two distinct indices i a ...
- ORA-16014 与 ORA-00312
场景: SQL> alter system archive log current; alter system archive log current * 第 1 行出现错误: ORA-1601 ...
- Guava ---- Ordering排序工具
使用Guava的排序工具类, 高速实现对象的单变量排序和多变量排序, 让你的开发效率爆炸... import com.google.common.collect.Lists; import com.g ...