P1447 [NOI2010] 能量采集

题意:

如果一棵植物与能量汇集机器(坐标为0,0)连接而成的线段上有 k 棵植物,则能量的损失为 2k + 1
给你一个n*m的植物园,问能量损失是多少
1<=n,m<=1e5

题解:

本题所求式子为:∑i=1n∑j=1ngcd(i,j)∗2−1\sum_{i=1}^{n}\sum_{j=1}^{n}gcd(i,j)*2-1∑i=1n​∑j=1n​gcd(i,j)∗2−1
式子如何求的?
参考这个AcWing 201. 可见的点
对于90%的数据,直接for循环就行
但是现在是acm赛制,要都过
本题思路参考这个,我只能说太秒了
设f[x]为gcd(i,j)=x的数对(i,j)的个数
答案就是∑x=1nf[x]∗2−1\sum_{x=1}^{n}f[x]*2-1∑x=1n​f[x]∗2−1
但是f[x]不好求啊
我们可以利用容斥来做
令g[x]为存在公因子=x的数对(i,j)的个数,注意不是最大公因数,而是存在公因子
g[x]=⌊nx⌋∗⌊mx⌋g[x]=\lfloor \frac{n}{x}\rfloor*\lfloor \frac{m}{x}\rfloorg[x]=⌊xn​⌋∗⌊xm​⌋
(1~n中是被x整除的数量为⌊nx⌋\lfloor \frac{n}{x} \rfloor⌊xn​⌋)
但是这些数中有一些最大公因数为2d,3d,4d,这些数重复添加,所以我们需要删去
所以:f[x]=g[x]-∑i∗x=2∗xmin(n,m)f[i∗x]\sum_{i*x=2*x}^{min(n,m)}f[i*x]∑i∗x=2∗xmin(n,m)​f[i∗x]
从后向前枚举x,这样可以用已知的f[i*x]去更新f[x]
复杂度O(nlog n)

代码:

#include <bits/stdc++.h>
#include <unordered_map>
#define debug(a, b) printf("%s = %d\n", a, b);
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> PII;
clock_t startTime, endTime;
//Fe~Jozky
const ll INF_ll= 1e18;
const int INF_int= 0x3f3f3f3f;
void read(){};
template <typename _Tp, typename... _Tps> void read(_Tp& x, _Tps&... Ar)
{x= 0;char c= getchar();bool flag= 0;while (c < '0' || c > '9')flag|= (c == '-'), c= getchar();while (c >= '0' && c <= '9')x= (x << 3) + (x << 1) + (c ^ 48), c= getchar();if (flag)x= -x;read(Ar...);
}
template <typename T> inline void write(T x)
{if (x < 0) {x= ~(x - 1);putchar('-');}if (x > 9)write(x / 10);putchar(x % 10 + '0');
}
void rd_test()
{#ifdef ONLINE_JUDGE
#elsestartTime = clock ();freopen("in.txt", "r", stdin);
#endif
}
void Time_test()
{#ifdef ONLINE_JUDGE
#elseendTime= clock();printf("\nRun Time:%lfs\n", (double)(endTime - startTime) / CLOCKS_PER_SEC);
#endif
}
const int N=100010;
int n,m;
ll f[N],ans;
ll g[N];
int main(){scanf("%d%d",&n,&m);if(n>m)swap(n,m);for(int i=n;i>=1;--i){g[i]=1ll*(n/i)*(m/i);for(int j=i*2;j<=n;j+=i)g[i]-=f[j];f[i]=g[i];ans+=(i*2-1)*f[i];}printf("%lld",ans);return 0;
}

P1447 [NOI2010] 能量采集相关推荐

  1. (每日一题)P1447 [NOI2010] 能量采集(莫反套路 + 欧拉反演 / 容斥原理)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.19 莫反 Problem Solu ...

  2. P1447 [NOI2010]能量采集(mobius反演)

    P1447 [NOI2010]能量采集 式子化简 显然题目就是要我们求∑i=1n∑j=1m2gcd(i,j)−1\sum_{i = 1} ^{n} \sum_{j = 1} ^{m} 2gcd(i, ...

  3. [NOI2010]能量采集

    469. [NOI2010]能量采集 ★★☆   输入文件:energy2010.in   输出文件:energy2010.out   简单对比 时间限制:1 s   内存限制:512 MB [问题描 ...

  4. BZOJ 2005: [Noi2010]能量采集( 数论 + 容斥原理 )

    一个点(x, y)的能量损失为 (gcd(x, y) - 1) * 2 + 1 = gcd(x, y) *  2 - 1. 设g(i)为 gcd(x, y) = i ( 1 <= x <= ...

  5. bz2005 2005: [Noi2010]能量采集 数学题

    2005: [Noi2010]能量采集 Time Limit: 10 Sec  Memory Limit: 552 MB Submit: 2494  Solved: 1475 [Submit][Sta ...

  6. bzoj2005: [Noi2010]能量采集

    不知道什么算法. 首先求一颗植物(i,j)与能量采集器的连线上有几颗植物. 答案是(gcd(i,j)-1),设i'= i/gcd(i,j),j'=j/gcd(i,j). 则这几颗植物是(i'k,j'k ...

  7. [2019.1.14]BZOJ2005 [Noi2010]能量采集

    以下设\(n\ge m\). 首先,一个点\((x,y)\)到\((0,0)\)的路径上经过的点的数量(不包括首尾)为\(gcd(x,y)-1\). 所以它的能量损耗为\(2\times gcd(x, ...

  8. BZOJ2005: [Noi2010]能量采集 莫比乌斯反演的另一种方法——nlogn筛

    分析:http://www.cnblogs.com/huhuuu/archive/2011/11/25/2263803.html 注:从这个题收获了两点 1,第一象限(x,y)到(0,0)的线段上整点 ...

  9. BZOJ2005 NOI2010 能量采集 欧拉函数

    题意:求$\sum\limits_{i = 1}^N {\sum\limits_{j = 1}^M {f(i,j)} } $,其中f(i,j)=(0,0)与(i,j)连线上点的数量 题解: 如果一个点 ...

最新文章

  1. 又一所双一流大学明确:发表论文数量不再作为博士毕业的限制性条件
  2. python机器学习可视化工具Yellowbrick绘图获取最佳聚类K值实战示例
  3. IDEA mybatis-generator 逆向工程
  4. aspose.cells html excel导出,C#使用Aspose.Cells导出Excel简单实现
  5. 【转】iOS开发6:UIActionSheet与UIAlertView
  6. linux端口命令是什么意思,cmd和linux的查看端口命令是什么?
  7. mysql字段简索引_MySQL优化看这一篇就够了
  8. minicom/picocom/cutecom/putty 安装与使用教程
  9. Kubernetes基础:Pod的详细介绍
  10. 考研 | 手把手教你打赢考研情报战,巧用有关考研的三大网站
  11. Team Foundation Server 2010 安装、部署与配置(五):用户权限管理 .
  12. ISO27001:2013体系认证
  13. Python生成图文并茂的PDF报告
  14. 一些iOS面试题答案
  15. 原创|批处理实现MicroUSB传输速度测试工具
  16. 浅谈腾讯云IM接入方式(java后端)
  17. elasticsearch 支持拼音检索
  18. 隐藏桌面图标通过命令行启动
  19. java中的0x00代表什么
  20. 2022年3月搜索引擎市场份额排行榜

热门文章

  1. 小眼睛有多惨?美颜都懒得救你......
  2. 网友半夜差点被沐浴露吓死,众人:原来不止我胆小....
  3. 世界上没有后悔药,时间匆匆,从关注它们开始......
  4. 下班以后看什么,决定你人生的高度
  5. 人工智能时代,学好数学有什么用?
  6. 数理思维这样培养才有效,从小就赢在方法上,每本不足3元!!
  7. 分布式部署_Apache Spark探秘:三种分布式部署方式比较
  8. python分布式爬虫及数据存储_二十一 Python分布式爬虫打造搜索引擎Scrapy精讲—爬虫数据保存...
  9. 在每个运行中运行多个查询_在Kubernetes中运行OpenEBS
  10. cv2.imread读取图像结果none_python cv2.imread 读取中文路径的图片返回为None的问题