HDU 4746 HDOJ Mophues 2013杭州网赛I题
比赛的时候就预感到这题能出,但是会耗时比较多。结果最后是出了,但是有更简单的题没出。
是不是错误的决策呢?谁知道呢
题目意思:
定义f(x) = x分解质因数出来的因子个数
如 x = p0 * p0 * p0 * p1 * p2,则f(x) = 5
特殊的, f(1) = 0
求 i = [1..n], j = [1..m] 组成的n*m组(i, j)对中,有多少组f( gcd(i,j) ) <= p
考虑简化版本,p = 0,即求有多少组 gcd(i,j) == 1。
见HDU 1695 http://acm.hdu.edu.cn/showproblem.php?pid=1695
师承叉姐(现在似乎叫御坂姐姐了...)的技能 莫比乌斯函数 + sqrt分块 可到0MS的题。
这题思路其实也大致差不多。
设d(x) 表示 gcd(i, j) 整除 x 的部分,容斥时的权值。
则满足 sigma( d(i) ) (i为x的所有约数) = ( f(x) >= p? 0 : 1 )
喜闻乐见,形如
for(i = 1;i<=n;i++)
for(j = i;j<=n;j+=i)
的nlogn预处理法
先预处理p=0..18时 每个数字在容斥中占的权值,然后求前缀和,最后sqrt分块计算。
Ps:由于题目的n,m范围下,f(x)最大为18,所以当p>18时,答案就为n*m
代码如下:
#include <vector>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = ;
int pr[N],p[N],cn[N],lp;
//预处理素数,和f(x),记为cn[x]
void gp(){
for(int i=;i<N;i++){
if(!pr[i]){
p[lp++]=pr[i]=i;
cn[i] = ;
}
for(int j=;j<lp && i*p[j]<N;j++){
int num = i*p[j];
pr[num] = p[j];
cn[num] = cn[i]+;
if(i%p[j] == ) break;
}
}
}
//预处理p = 0..18时的d(x),记为tn[p][x]
int tn[][N];
void gtn(){
for(int i=;i<;i++){
tn[i][] = ;
for(int j=;j<N;j++){
if(cn[j] - i == ){
for(int k=j;k<N;k+=j)
tn[i][k]--;
}
else if(cn[j] > i){
int tmp = - - (tn[i][j]);
tn[i][j] = tmp;
if(tmp){
for(int k=j+j;k<N;k+=j)
tn[i][k] += tmp;
}
}
}
for(int j=;j<N;j++) tn[i][j]+=tn[i][j-];
}
}
void adn(vector<int> &s,int x){
s.push_back();
for(int i=;i*i<=x;i++){
s.push_back(i);
s.push_back(x/i);
}
}
ll n,m;
int k,*sm;
ll gao(){
vector<int> num;
adn(num,n);
adn(num,m);
sort(num.begin(),num.end());
num.erase(unique(num.begin(),num.end()),num.end());
ll ans = ;
int l = num.size();
sm = tn[k];
for(int i=;i<l;i++){
int d = num[i];
ll tmp = sm[d] - sm[num[i-]];
ans += tmp*(ll)(n/d)*ll(m/d);
}
return ans;
}
int main(){
//freopen("in.txt", "r", stdin);
gp();
gtn();
int T;
scanf("%d",&T);
while(T--){
scanf("%I64d%I64d%d",&n,&m,&k);
if(k> || (<<k)>=max(n,m)){
printf("%I64d\n",n*m);
continue;
}
printf("%I64d\n",gao());
}
return ;
}
HDU 4746 HDOJ Mophues 2013杭州网赛I题的更多相关文章
- HDU 4747 Mex (2013杭州网络赛1010题,线段树)
Mex Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Total Submis ...
- ZOJ Bizarre Routine 2013杭州网赛B题
题目意思: 给定n, expect, a, b 要求你构造一组array[],存放一个1..n的排列,使的下面的程序能输出YES 题目所示代码: bool less_than(x, y) { T++; ...
- HDU 4741 Save Labman No.004 (2013杭州网络赛1004题,求三维空间异面直线的距离及最近点)
Save Labman No.004 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 4739 Zhuge Liang's Mines (2013杭州网络赛1002题)
Zhuge Liang's Mines Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- HDU 4738 Caocao's Bridges (2013杭州网络赛1001题,连通图,求桥)
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- 2013杭州现场赛B题-Rabbit Kingdom
杭州现场赛的题.BFS+DFS #include <iostream> #include<cstdio> #include<cstring> #define inf ...
- HDU 4816 Bathysphere (2013长春现场赛D题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4816 2013长春区域赛的D题. 很简单的几何题,就是给了一条折线. 然后一个矩形窗去截取一部分,求最 ...
- HDU 4768 Flyer (2013长春网络赛1010题,二分)
Flyer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- 2013杭州网赛 1001 hdu 4738 Caocao's Bridges(双连通分量割边/桥)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4738 题意:有n座岛和m条桥,每条桥上有w个兵守着,现在要派不少于守桥的士兵数的人去炸桥,只能炸一条桥 ...
随机推荐
- 关于img底部空白
<img>元素底部为何有空白? 问题: 最近听网课遇到这样一个问题,先po出代码如下: <!--html--> <div class="top"> ...
- 利用Selenium+java实现淘宝自动结算购物车商品(附源代码)
转载请声明原文地址! 本次的主题是利用selenium+java实现结算购买购物车中的商品. 话不多说,本次首先要注意的是谷歌浏览器的版本,浏览器使用的驱动版本,selenium的jar包版本. ...
- PPT入门学习笔记1:待修改
一直被比人忽悠实在是累了,我可以接受自己的失误,但我接受不了别人一次又一次的坑我! 做PPT的原则是什么? 1.一个目标: "一个PPT只为一类人服务,针对不同的听众制作不同层次内容的PPT ...
- source insight插件
直使用sourceinsight编辑C/C++代码,sourceinsight是一个非常好用的编辑工具可以任意定位,跳转,回退,本人一直 使用该工具做C/C++开发,sourceinsight能够满足 ...
- POJ-3126 BFS,埃式筛选及黑科技
题目大意:给定两个四位素数a b,要求把a变换到b,变换的过程要保证 每次变换出来的数都是一个 四位素数,而且当前这步的变换所得的素数 与 前一步得到的素数 只能有一个位不同,而且每步得到的 ...
- python正则表达式02--findall()和search()方法区别,group()方法
import re st = 'asxxixxsaefxxlovexxsdwdxxyouxxde' #search()和 findall()的区别 a = re.search('xx(.*?)xxsa ...
- [原]sencha touch之表单二(注册页面)
接着上一篇的登陆页面,来一个最简单的注册页面,几乎包含了常用的field Ext.application({ id:'itKingApp', launch:function(){ var formPa ...
- web在线调试
xx <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta h ...
- laravel5.5中间件
目录 1. 中间件知识 1. artisan 命令 2. 文件内容 3. 前置中间件和后置中间件 4. 使用中间件 2. 控制器中间件 1. 中间件知识 1. artisan 命令 php artis ...
- C# Json 序列化大全--任我行
public class JsonHelper { /// <summary> /// 将Model转换为Json字符串 /// </summary> /// <type ...