BZOJ 2005 能量采集
Description
栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量。在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起。 栋栋的植物种得非常整齐,一共有\(n\)列,每列有\(m\)棵,植物的横竖间距都一样,因此对于每一棵植物,栋栋可以用一个坐标\((x,y)\)来表示,其中\(x\)的范围是\(1\)至\(n\),表示是在第\(x\)列,\(y\)的范围是\(1\)至\(m\),表示是在第\(x\)列的第\(y\)棵。 由于能量汇集机器较大,不便移动,栋栋将它放在了一个角上,坐标正好是\((0,0)\)。能量汇集机器在汇集的过程中有一定的能量损失。如果一棵植物与能量汇集机器连接而成的线段上有k棵植物,则能量的损失为\(2k+1\)。例如,当能量汇集机器收集坐标为\((2,4)\)的植物时,由于连接线段上存在一棵植物\((1,2)\),会产生\(3\)的能量损失。注意,如果一棵植物与能量汇集机器连接的线段上没有植物,则能量损失为1。现在要计算总的能量损失。 下面给出了一个能量采集的例子,其中\(n=5,m=4\),一共有\(20\)棵植物,在每棵植物上标明了能量汇集机器收集它的能量时产生的能量损失。在这个例子中,总共产生了36的能量损失。
Input
仅包含一行,为两个整数\(n\)和\(m\)。
Output
仅包含一个整数,表示总共产生的能量损失。
Sample Input
5 4
Sample Output
36
HINT
对于\(10\%\)的数据:\(1 \le n,m \le 10\);
对于\(50\%\)的数据:\(1 \le n, m \le 100\);
对于\(80\%\)的数据:\(1 \le n, m \le 1000\);
对于\(90\%\)的数据:\(1 \le n, m \le 10000\);
对于\(100\%\)的数据:\(1 \le n, m \le 100000\)。
题目求$$\sum_{i=1}^{N} \sum_{j=1}^{M}2 \times gcd(i,j) - 1$$
转换变成枚举\(gcd\)求$$\sum_{g=1}^{min(N,M)}(2 \times g -1)\sum_{i = 1}^{N} \sum_{j = 1}^{M} [gcd(i,j) = g]$$
然后同BZOJ 2301 Problem b的做法进行莫比乌斯反演,就可以化成$$\sum_{g=1}{min(N,M)}\sum_{k=1}{min(\lfloor \frac{N}{g} \rfloor,\lfloor \frac{M}{g} \rfloor)} \mu(k) \lfloor \frac{N}{kg} \rfloor \lfloor \frac{M}{kg} \rfloor $$
由于$$\sum_{i=1}^{N} \frac{1}{i} \approx ln N$$
所以直接求这个式子复杂度是\(O(NlogN)\)。
由于人比较愚钝,所以我预处理了\(\mu\)的前缀和,还傻逼的\(\sqrt{N}\)分段了。
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef long long ll;
#define maxn 100010
int n,m,tot,prime[maxn],mu[maxn];
bool exist[maxn]; ll ans;
inline void find()
{
mu[1] = 1;
for (int i = 2;i <= n;++i)
{
if (!exist[i]) prime[++tot] = i,mu[i] = -1;
for (int j = 1;j <= tot&&i*prime[j]<=n;++j)
{
exist[i*prime[j]] = true;
if (i % prime[j] == 0) { mu[i*prime[j]] = 0; break; }
mu[i*prime[j]] = -mu[i];
}
}
for (int i = 1;i <= n;++i) mu[i] += mu[i-1];
}
inline ll calc(int a,int b,int d)
{
a /= d; b /= d;
ll ret = 0; int pos;
for (int i = 1;i <= a;i = pos+1)
{
pos = min(a/(a/i),b/(b/i));
ret += (ll)(mu[pos]-mu[i-1])*(ll)(a/i)*(ll)(b/i);
}
return ret;
}
int main()
{
freopen("2005.in","r",stdin);
freopen("2005.out","w",stdout);
scanf("%d %d",&n,&m); if (n > m) swap(n,m);
find();
for (int i = 1;i <= n;++i)
ans += (ll)((i<<1)-1)*calc(n,m,i);
printf("%lld",ans);
fclose(stdin); fclose(stdout);
return 0;
}
BZOJ 2005 能量采集的更多相关文章
- BZOJ 2005 能量采集(容斥原理)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2005 题意:给定n和m,求 思路:本题主要是解决对于给定的t,有多少对(i,j)满足x= ...
- bzoj 2005 能量采集 莫比乌斯反演
我们要求的是∑ni=1∑mj=1(2×gcd(i,j)−1) 化简得2×∑ni=1∑mj=1gcd(i,j)−n×m 所以我们现在只需要求出∑ni=1∑mj=1gcd(i,j)即可 ∑ni=1∑mj= ...
- BZOJ 2005: [Noi2010]能量采集
2005: [Noi2010]能量采集 Time Limit: 10 Sec Memory Limit: 552 MBSubmit: 3312 Solved: 1971[Submit][Statu ...
- BZOJ 2005: [Noi2010]能量采集( 数论 + 容斥原理 )
一个点(x, y)的能量损失为 (gcd(x, y) - 1) * 2 + 1 = gcd(x, y) * 2 - 1. 设g(i)为 gcd(x, y) = i ( 1 <= x <= ...
- BZOJ 2005 [Noi2010]能量采集 (数学+容斥 或 莫比乌斯反演)
2005: [Noi2010]能量采集 Time Limit: 10 Sec Memory Limit: 552 MBSubmit: 4493 Solved: 2695[Submit][Statu ...
- 【BZOJ】2005: [Noi2010]能量采集(欧拉函数+分块)
http://www.lydsy.com/JudgeOnline/problem.php?id=2005 首先和某题一样应该一样可以看出每个点所在的线上有gcd(x,y)-1个点挡着了自己... 那么 ...
- bzoj 2005: [Noi2010]能量采集 筛法||欧拉||莫比乌斯
2005: [Noi2010]能量采集 Time Limit: 10 Sec Memory Limit: 552 MB[Submit][Status][Discuss] Description 栋栋 ...
- 【BZOJ】【2005】【NOI2010】能量采集
欧拉函数 玛雅,我应该先看看JZP的论文的……贾志鹏<线性筛法与积性函数>例题一 这题的做法……仔细想下可以得到:$ans=2*\sum_{a=1}^n\sum_{b=1}^m gcd(a ...
- 2005: [Noi2010]能量采集 - BZOJ
Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得 ...
随机推荐
- JMeter对Oracle数据库进行压力测试
步骤 (1)复制ORACLE的JDBC驱动JAR包文件(ojdbc14.jar)到JMeter的lib目录下. (2)运行jmeter.bat (3)建立线程组:右键测试计划->添加->T ...
- 移动測试技术保护源码!解码全球首款移动端白盒測试工具ThreadingTest (文章转自己主动点科技)
作者 智晓锋 - 2014/07/14 自从斯诺登曝光美监听丑闻事件之后,我国政府就将信息安全问题上升到了国家安全的高度.基于此.国内的一家创业公司推出了智能型Android真机白盒測试以及开发辅助类 ...
- Linux 内核使用的 GNU C 扩展
gcc核心扩展linuxforum(转)=========================== Linux 内核使用的 GNU C 扩展 =========================== GNC ...
- 去掉cajviewer 右上角的“中国知网数字出版物超市
cajviewer软件是一款可以提取pdf字码的软件(即使pdf是扫描版的) 下面是转的一个博文可以去除软件右上角图标的方法: 去掉cajviewer 7.1.2右上角的“中国知网数字出版物超市” 1 ...
- SCADESuite嵌入式软件基于模型的开发
SCADE Suite®产品是针对高安全性嵌入式软件的基于模型的开发环境 SCADE Suite是高安全性嵌入式软件的开发标准,其应用领域涵盖航空.国防.轨道交通.能源和重工业.专为最高等级的质量和安 ...
- iOS组件化思路-大神博客研读和思考
一.大神博客研读 随着应用需求逐步迭代,应用的代码体积将会越来越大,为了更好的管理应用工程,我们开始借助CocoaPods版本管理工具对原有应用工程进行拆分.但是仅仅完成代码拆分还不足以解决业务之间的 ...
- jQuery给CheckBox添加事件
<asp:CheckBox ID="ckbTable" runat="server" Checked="false" /> &l ...
- HTML+CSS基础学习笔记(6)
一.元素分类 CSS中html的标签元素大体分为三种类型 1.块状元素 @特点: #每个块级元素都从新的一行开始,并且其后的元素也另起一行(一个块级元素独占一行) #元素的高度.宽度.行高以及顶和底边 ...
- JQuery判断子Iframe 加载完成的技术解决
当需要我们给当前页面动态创建Iframe子框架的时候,并且同时需要操作子Iframe里的方法的时候,我们发现无法成功实现.这是为什么呢?经小程总结,发现子Iframe还没有来的及加载完成,就去执行里面 ...
- .NET 统一用户管理 -- 单点登录
单点登录 前言 本篇做为.Net 统一用户管理的系列文章的开山之作,主要说一个单点登录是怎么实现的,以及为啥要统一用户管理. 单点登录(Single Sign On),简称为 SSO,是目前比较流行的 ...