首页 > 其他分享 >洛谷 P1447 [NOI2010] 能量采集

洛谷 P1447 [NOI2010] 能量采集

时间:2022-11-02 19:00:27浏览次数:91  
标签:P1447 洛谷 sum 植物 mid varphi 汇集 NOI2010 能量

题目描述

https://www.luogu.com.cn/problem/P1447
栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量。在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起。

栋栋的植物种得非常整齐,一共有 \(n\) 列,每列有 \(m\) 棵,植物的横竖间距都一样,因此对于每一棵植物,栋栋可以用一个坐标 \((x, y)\) 来表示,其中 \(x\) 的范围是 \(1\) 至 \(n\),\(y\) 的范围是 \(1\) 至 \(m\),表示是在第 \(x\) 列的第 \(y\) 棵。

由于能量汇集机器较大,不便移动,栋栋将它放在了一个角上,坐标正好是 \((0, 0)\)。

能量汇集机器在汇集的过程中有一定的能量损失。如果一棵植物与能量汇集机器连接而成的线段上有 \(k\) 棵植物,则能量的损失为 \(2k + 1\)。例如,当能量汇集机器收集坐标为 \((2, 4)\) 的植物时,由于连接线段上存在一棵植物 \((1, 2)\),会产生 \(3\) 的能量损失。注意,如果一棵植物与能量汇集机器连接的线段上没有植物,则能量损失为 \(1\)。现在要计算总的能量损失。

题意

就是求:

\(2\times\sum_{i=1}^n\sum_{j=1}^m(\gcd(i,j)-1)\)

\(=2\times\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)-n\times m\)

也就是求:

\(\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)\)

解题思路

接下来通过狄利克雷卷积对式子进行化简:

\(\because I~*~\varphi =id\)

\(\therefore \sum_{d\mid x}I(\frac{x}{d})\varphi(d)=id(x)\)

\(\therefore \sum_{d\mid x}\varphi(d)=x\)

\(\therefore \sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)\)

\(=\sum_{i=1}^n\sum_{j=1}^m\sum_{d\mid \gcd(i,j)}\varphi(d)\)

\(=\sum_{i=1}^n\sum_{j=1}^m\sum_{d\mid i,d \mid j}\varphi(d)\)

接下来统计 \(\varphi(d)\) 的个数:

\(=\sum_{d=1}^{\min(n,m)}\varphi(d) (\sum_{i=1}^n[d\mid i]\times \sum_{j=1}^m[d \mid j])\)

\(=\sum_{d=1}^{\min(n,m)} \left \lfloor \frac{n}{d} \right \rfloor \left \lfloor \frac{m}{d} \right \rfloor \varphi(d)\)

时间复杂度 \(O(\min(n,m))\)

代码

先线性筛一下欧拉函数,再套公式。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+5;
int n,m,ip[N],p[N];
ll phi[N],ans;
void getphi(){
	int cnt=0;
	phi[1]=1;
	for(int i=2;i<N;i++) ip[i]=1;
	for(int i=2;i<N;i++){
		if(ip[i]){
			p[++cnt]=i;
			phi[i]=i-1;
		}
		for(int j=1;j<=cnt&&i*p[j]<N;j++){
			ip[i*p[j]]=0;
			if(i%p[j]) phi[i*p[j]]=phi[i]*phi[p[j]];
			else {
				phi[i*p[j]]=phi[i]*p[j];
				break;
			}
		}
	}
}
int main(){
	scanf("%d%d",&n,&m);
	getphi();
	for(int i=1;i<=min(n,m);i++){
		ans+=phi[i]*(n/i)*(m/i);
	}
	printf("%lld",2*ans-1ll*n*m);
	return 0;
}

标签:P1447,洛谷,sum,植物,mid,varphi,汇集,NOI2010,能量
From: https://www.cnblogs.com/xiaocaibiancheng/p/16851957.html

相关文章

  • 洛谷 P8820 [CSP-S 2022] 数据传输 题解
    首先考虑对于每一次询问暴力DP。设\(f_{u,i}\)表示从\(s\)开始,传到一个到\(u\)距离为\(i\)的点,需要的最短时间。当\(k=3\)时,可能会传到不在\(s\tot\)路......
  • 洛谷 P7207
    首先题目给出结论,对于任意\(n,m\)均有解。所以如果\(A\)中后\(x\)个数和\(B\)中前\(x\)个数两两配对,就可以转化为\(n-x,m+x\)的子问题。所以对于\(A\)中最......
  • 洛谷-P2015 二叉苹果树
    二叉苹果树树形dp设计状态:\(dp[u][i]\),表示以结点\(u\)为根的子树,保留\(i\)条边的最大苹果数状态转移:遍历每一个子节点\(v\)保留和\(v\)相连的边:\(dp[u][i]=......
  • 洛谷-P1122 最大子树和
    最大子树和树形dp对于一个节点来说,如果删除掉一个连接子节点的边,则以该子节点为根的子树上面的贡献都会变成\(0\)设计状态:\(dp[u]\),表示以\(u\)为根的子树中,贡献值最......
  • 洛谷 P3183 [HAOI2016]食物链(dfs+记忆化搜索)
    https://www.luogu.com.cn/problem/P3183题目大意:给定n个节点,标号分别为1——n,然后给出m条有向边,问我们不同的食物链路径有多少?输入#1101612141102325......
  • 洛谷P1144
    最短路计数题目描述给出一个\(N\)个顶点\(M\)条边的无向无权图,顶点编号为\(1\simN\)。问从顶点\(1\)开始,到其他每个点的最短路有几条。输入格式第一行包含\(2......
  • 洛谷 P6573 [BalticOI 2017] Toll 题解
    Link算是回归OI后第一道自己写的题(考CSP的时候可没回归)写篇题解纪念一下题目大意:\(n\)个点,\(m\)条单向边,每条边的两端点\(x\),\(y\)必定满足\(\left\lfloor\dfrac......
  • 洛谷P1462spfa + 二分答案
    第一次接触二分答案的题目最开始是没有思路的看了一个题解,然后强行理解之后开始自己打了一遍,然而结果是只得了30分过了3个点其他全wa,之后是漫长的debug,这里想感慨一句自己d......
  • 洛谷 P5369
    先规定一些东西:若存在多个\(p\)使得\(\sum_{i=1}^{p}{a_i}\)最大,默认最大(即最靠右)的一个\(p\)是它的最大前缀和的位置。\(U\)表示全集。假设\(p\)是最大前缀......
  • 洛谷 P1464 Function(dfs+记忆化搜索)
    https://www.luogu.com.cn/problem/P1464单个返回条件的时候,直接return多个返回条件的时候,采用记忆化搜索思想,边存储边继续往下搜索中间穿插记忆化判断,如果之前有过此......