整理的算法模板合集: ACM模板

点我看算法全家桶系列!!!

实际上是一个全新的精炼模板整合计划


每日一题(莫反 / 多项式 / 母函数 / 群论) 2021.4.19 莫反

Problem


Solution

A. 莫比乌斯反演 + 欧拉反演

先简单解释一下本题解题第一步用到的显然的结论。

数轴上任意一点 (x1,y1)(x_1,y_1)(x1​,y1​) 到原点之间线段上的经过的点 (x2,y2)(x_2,y_2)(x2​,y2​) ,gcd⁡(x2,y2)\gcd(x_2,y_2)gcd(x2​,y2​) 一定是 gcd⁡(x1,y1)\gcd(x_1,y_1)gcd(x1​,y1​) 的因子。例如仪仗队那道题,从原点出发能看到的点一定都是 gcd⁡(x,y)=1\gcd(x, y)=1gcd(x,y)=1 的点。从原点到 (x1,y1)(x_1,y_1)(x1​,y1​) 所以经过的点的个数就是 gcd⁡(x1,y1)−1\gcd(x_1,y_1)-1gcd(x1​,y1​)−1(去掉自身)( (2,4)(2,4)(2,4) 会有因子 (1,2)(1,2)(1,2) )

证明来源:

Code

简单的代码:

Time

O(n+n)O(n+\sqrt n)O(n+n​)

// Problem: P1447 [NOI2010] 能量采集
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1447
// Memory Limit: 125 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>
#define int long long
using namespace std;const int N = 500007;int primes[N], cnt, phi[N];
int n, m;
bool vis[N];
int sum[N];void init(int n)
{phi[1] = 1; for(int i = 2; i <= n; ++ i) {if(vis[i] == 0) {primes[ ++ cnt] = i;phi[i] = i - 1;}for(int j = 1; j <= cnt && i * primes[j] <= n; ++ j) {vis[i * primes[j]] = true;if(i % primes[j] == 0) {phi[i * primes[j]] = phi[i] * primes[j];break;} phi[i * primes[j]] = phi[i] * phi[primes[j]];}}for(int i = 1; i <= n; ++ i) {sum[i] = sum[i - 1] + phi[i];   }
}void solve()
{int res = 0;for(int l = 1, r; l <= n; l = r + 1) {r = min(n / (n / l), m / (m / l));res +=  (n / l) * (m / l) * (sum[r] - sum[l - 1]);//(sum[r] - sum[l - 1])已经是区间长度了}res = 2 * res - n * m;printf("%lld\n", res);
}signed main()
{init(N - 7);scanf("%lld%lld", &n, &m);if(n > m) swap(n, m);solve();return 0;
}

B. 容斥原理

时间复杂度 O(nlogn)O(nlogn)O(nlogn)


%%%

// Problem: P1447 [NOI2010] 能量采集
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1447
// Memory Limit: 125 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)#include <bits/stdc++.h>
#define int long long
using namespace std;const int N = 500007;int n, m;
int f[N];signed main()
{scanf("%lld%lld", &n, &m);if(n > m) swap(n, m);int ans = 0;for(int i = n; i; -- i) {f[i] = (n / i) * (m / i);for(int j = i << 1; j <= n; j += i) f[i] -= f[j];ans += (2 * i - 1) * f[i];}printf("%lld\n", ans);return 0;
}

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

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

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

  2. P1447 [NOI2010] 能量采集

    P1447 [NOI2010] 能量采集 题意: 如果一棵植物与能量汇集机器(坐标为0,0)连接而成的线段上有 k 棵植物,则能量的损失为 2k + 1 给你一个n*m的植物园,问能量损失是多少 1& ...

  3. [NOI2010]能量采集

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

  4. (每日一题)P3768 简单的数学题(确信)(莫反 + 欧拉反演 + 杜教筛 )

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

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

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

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

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

  7. bzoj2005: [Noi2010]能量采集

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

  8. NOI2010 能量采集

    传送门 这个题观察一下之后发现,答案就是求 \[\sum_{i=1}^n\sum_{j=1}^mgcd(i,j) *2 - 1\] 那我们的目标就是求\(\sum_{i=1}^n\sum_{j=1}^ ...

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

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

最新文章

  1. 算法设计与分析第2章 递归与分治策略
  2. 【Kotlin】Kotlin 类的继承 三 ( super 关键字使用 | super@ 外部调用父类方法 | 子类选择性调用 父类 / 接口 方法 super )
  3. linux ps aux 结果解释
  4. [2020-09-11 CQBZ/HSZX多校联测 T3] 万猪拱塔(线段树+巧妙转化)
  5. 【Java】synchronized关键字笔记
  6. MySQL:数据库还原问题
  7. MVC公司架构介绍-工具类(一)
  8. 关于Oracle返回值
  9. Hbase权威指南(含目录,高清,免费)
  10. python面试专题--with 关键字与上下文管理
  11. linux下哪个输入法最好,[最好]linux下输入法→linux下输入法
  12. 数据挖掘导论课后习题答案-第六章
  13. 时间协议ntp服务器,时间服务器NTP搭建及NTP协议简介
  14. React 18 新特性-入门教程
  15. JAVA里面一加到一百等于多少_从1加到100等于多少 【求和算法汇总】
  16. 红米k50 刷入类原生教程
  17. 带你从头到尾梳理大图片加载OOM处理问题
  18. Android Mvc 模式
  19. 【学习】笔记本电脑重新安装系统win10
  20. linux系统 系统推荐 deepin国产系统 最好用的国产linux系统 Windows系统的优秀替代品 deepin系统安装 系统安装 deepin

热门文章

  1. 神经网络基础知识总结
  2. 漫话:如何给女朋友解释为什么Windows上面的软件都想把自己安装在C盘
  3. 计算机视觉训练模型效果不佳怎么破?
  4. 动态获得资源的路径大小写问题
  5. iOS 打电话回到当前应用
  6. [Cocos2d-x]视差滚屏效果的实现
  7. 程序、进程、线程区别与联系
  8. 允许用户在web Interface上修改密码
  9. 第四章 Lync server 2010的安装
  10. 《基于MFC的OpenGL编程》Part 1 A Primer