2005: [Noi2010]能量采集

Time Limit: 10 Sec  Memory Limit: 552 MB
[Submit][Status][Discuss]

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

【样例输入1】
5 4
【样例输入2】
3 4

Sample Output

【样例输出1】
36
【样例输出2】
20
对于100%的数据:1 ≤ n, m ≤ 100,000。
 
        n  m
题意:求2*∑      ∑ gcd(i,j)-1;
       i=1  j=1
思路:首先一个很涨知识的筛法;
   g[k]表示gcd(i,j)==k的个数;
   g[k]=n/k*m/k-g[2*k]-g[3*k]-.......;
   逆序写即可,复杂度O(n*log(n));
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define pi (4*atan(1.0))
  5. const int N=1e5+,M=4e6+,inf=1e9+;
  6. ll g[N];
  7. int main()
  8. {
  9. int x,y,z,i,t;
  10. while(~scanf("%d%d",&x,&y))
  11. {
  12. ll ans=;
  13. for(i=min(x,y);i>=;i--)
  14. {
  15. g[i]=(ll)x/i*(y/i);
  16. for(t=i+i;t<N;t+=i)
  17. g[i]-=g[t];
  18. ans+=g[i]*(*i-);
  19. }
  20. printf("%lld\n",ans);
  21. }
  22.  
  23. return ;
  24. }

欧拉函数:

       n     m     n     m                       min(n,m)

证明过程:   ∑      ∑ gcd(i,j)=∑      ∑     ∑ Ø(d)     =  ∑  Ø(d) * (n/d) *(m/d)

      i=1   j=1           i=1   j=1  d|gcd(i,j)     d=1

      分块写,复杂度 预处理O(1e5)+sqrt(min(n,m));

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define pi (4*atan(1.0))
  5. const int N=1e5+,M=1e6+,inf=1e9+;
  6. const ll INF=1e18+;
  7. ll p[N],ji;
  8. bool vis[N];
  9. ll phi[N];
  10. ll sum[N];
  11. void get_eular(int n)
  12. {
  13. ji = ;
  14. phi[]=;
  15. memset(vis, true, sizeof(vis));
  16. for(int i = ; i <= n; i++)
  17. {
  18. if(vis[i])
  19. {
  20. p[ji ++] = i;
  21. phi[i] = i - ;
  22. }
  23. for(int j = ; j < ji && i * p[j] <= n; j++)
  24. {
  25. vis[i * p[j]] = false;
  26. if(i % p[j] == )
  27. {
  28. phi[i * p[j]] = phi[i] * p[j];
  29. break;
  30. }
  31. else
  32. phi[i * p[j]] = phi[i] * phi[p[j]];
  33. }
  34. }
  35. }
  36. int main()
  37. {
  38. get_eular(N);
  39. memset(sum,,sizeof(sum));
  40. for(int i=;i<=1e5;i++)
  41. sum[i]=sum[i-]+phi[i];
  42. ll x,y;
  43. while(~scanf("%lld%lld",&x,&y))
  44. {
  45. if(x>y)swap(x,y);
  46. ll ans=;
  47. for(int L=,R=;L<=x;L=R+)
  48. {
  49. R=min(x/(x/L),y/(y/L));
  50. ans+=(sum[R]-sum[L-])*(x/L)*(y/L);
  51. }
  52. printf("%lld\n",*ans-x*y);
  53. }
  54. return ;
  55. }

莫比乌斯:模版题;

     gcd(i,j)==k,枚举k;

     复杂度O(min(n,m)sqrt(n));

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define esp 0.00000000001
  5. #define pi 4*atan(1)
  6. const int N=1e5+,M=1e7+,inf=1e9+,mod=1e9+;
  7. ll mu[N], p[N], np[N], cnt, sum[N];
  8. void init() {
  9. mu[]=;
  10. for(int i=; i<N; ++i) {
  11. if(!np[i]) p[++cnt]=i, mu[i]=-;
  12. for(int j=; j<=cnt && i*p[j]<N; ++j) {
  13. int t=i*p[j];
  14. np[t]=;
  15. if(i%p[j]==) { mu[t]=; break; }
  16. mu[t]=-mu[i];
  17. }
  18. }
  19. for(int i=;i<N;i++)
  20. sum[i]=sum[i-]+mu[i];
  21. }
  22. ll getans(int b,int d)
  23. {
  24. ll ans=;
  25. for(int L=,R=;L<=b;L=R+)
  26. {
  27. R=min(b/(b/L),d/(d/L));
  28. ans+=(ll)(sum[R]-sum[L-])*(b/L)*(d/L);
  29. }
  30. return ans;
  31. }
  32. int main()
  33. {
  34. init();
  35. int b,d,k;
  36. while(~scanf("%d%d",&b,&d))
  37. {
  38. if(b>d)swap(b,d);
  39. ll ans=;
  40. for(int i=;i<=b;i++)
  41. ans+=getans(b/i,d/i)*i;
  42. printf("%lld\n",*ans-(ll)b*d);
  43. }
  44. return ;
  45. }

    

bzoj 2005: [Noi2010]能量采集 筛法||欧拉||莫比乌斯的更多相关文章

  1. 【BZOJ】2005: [Noi2010]能量采集(欧拉函数+分块)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2005 首先和某题一样应该一样可以看出每个点所在的线上有gcd(x,y)-1个点挡着了自己... 那么 ...

  2. BZOJ 2005: [Noi2010]能量采集

    2005: [Noi2010]能量采集 Time Limit: 10 Sec  Memory Limit: 552 MBSubmit: 3312  Solved: 1971[Submit][Statu ...

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

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

  4. BZOJ 2005 [Noi2010]能量采集 (数学+容斥 或 莫比乌斯反演)

    2005: [Noi2010]能量采集 Time Limit: 10 Sec  Memory Limit: 552 MBSubmit: 4493  Solved: 2695[Submit][Statu ...

  5. BZOJ2005: [Noi2010]能量采集(欧拉函数)

    Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后, 栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种 ...

  6. 【刷题】BZOJ 2005 [Noi2010]能量采集

    Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. 栋栋的植物种得 ...

  7. BZOJ 2005: [Noi2010]能量采集(莫比乌斯反演)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2005 题意:   思路: 首先要知道一点是,某个坐标(x,y)与(0,0)之间的整数点的个数为gcd ...

  8. BZOJ 2005: [Noi2010]能量采集 [莫比乌斯反演]

    题意:\((0,0)\)到\((x,y),\ x \le n, y \le m\)连线上的整点数\(*2-1\)的和 \((0,0)\)到\((a,b)\)的整点数就是\(gcd(a,b)\) 因为. ...

  9. BZOJ 2005 [Noi2010]能量采集 ——Dirichlet积

    [题目分析] 卷积一卷. 然后分块去一段一段的求. O(n)即可. [代码] #include <cstdio> #include <cstring> #include < ...

随机推荐

  1. Keepalived + MySQLfailover + GTIDs 高可用

    架构图     10.1.1.207    mysql master + keepalived     10.1.1.206    mysql slave ( backup master ) + ke ...

  2. 创建自己的Spring Boot Starter

    抽取通用模块作为项目的一个spring boot starter.可参照mybatis的写法. IDEA创建Empty Project并添加如下2个module,一个基本maven模块,另一个引入sp ...

  3. Arbitrage - poj 2240 (Bellman-ford)

      Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 17374   Accepted: 7312 Description Ar ...

  4. MIC的异步传输

    关于signal和wait,属于异步传输的语法,即CPU端无需等待offload语句返回,即可异步运行下面的代码.一般用于启动MIC代码段后,并发执行CPU代码,达到同步执行的目的.另外一种用法是使用 ...

  5. 小技巧:怎样以另外的Windows用户执行SSMS

    可能会碰到这种问题.你须要在一台机器上面使用不同的Windows账户连接到SQL Server做測试.默认情况下,你须要用不同的Windows账户登录然后測试. 实际上不须要每一个windows登陆. ...

  6. ubuntu 及 postgredql 安装配置小坑摘录

    ubuntu 16.04.1 安装 Ubuntu Server 16.04.1安装配置图解教程,按教程修改局域网static IP 开启sftp必须 解决SSH服务拒绝密码,之后才能欢乐地使用file ...

  7. python实现身份证识别

    github: 人脸联合语音身份认证:https://github.com/tsstss123/faceUnionVoiceRecognition 身份证识别简易版:https://github.co ...

  8. linux下nginx php配置redis

      之前一直遇到,Module compiled with module API=20090626这个坑问题!!! NOTICE: PHP message: PHP Warning: PHP Star ...

  9. ASIHTTPRequest-Cookie的使用

    本文转载至 http://www.cocoachina.com/bbs/read.php?tid=93220&page=e&#a     持久化cookie ASIHTTPReques ...

  10. java类型系统知识点总结

    下面的东西是在一天内用了三个编辑器写的,所以风格有点不太统一 一:下午完成 主要看了java的类型系统,具体如下. 1)接口 作为又一个引用类型,接口可以说是一种特殊的类,可以有属性和行为(字段和方法 ...