• 「考试」夜莺与玫瑰


      这道题还是不错的,不过一开始读错了题,以为要求线段个数,那样的话是一个裸的莫比乌斯反演,写完过不了大样例才发现是求直线。于是直接死了。

      考后看题解。

      发现$ans=sumlimits_{i=1}^{n-1}sumlimits_{j=1}^{m-1}[gcd(i,j)==1]((n-i)(m-j)-max(0,n-2i)*max(0,m-2j))$

      什么意思呢?

      首先枚举斜率,然后计算这个斜率的直线的个数,这样的话我们不能用相同的斜率来重复计算,所以要[gcd(i,j)==1]。

      那么考虑一下哪些点可以作为一个线的代表元素?这个点的前驱必然在点阵中,后继必然不再点阵中。

      这样的话是一个矩形的右上边框的贡献,也就是上面那个式子的后半部分。

      考虑优化。

      卡了空间只能开两个数组。于是我用一个存满足$gcd(i,j)==1$的i的和,另一个是j的。

      这样的话,需要快速知道的就是

      1.这个要乘n。反演一下。

       $sumlimits_{i=1}^{n-1}sumlimits_{j=1}^{m-1}[gcd(i,j)==1]$

      $=sumlimits_{i=1}^{n-1}sumlimits_{j=1}^{m-1}sumlimits_{d|gcd(i,j)}mu(d)$

      $=sumlimits_{d=1}^{min(n-1,m-1)}mu(d)lfloorfrac{n-1}{d} floorlfloorfrac{m-1}{i} floor$

      2.然后是后面的ij项。

       $sumlimits_{i=1}^{n-1}sumlimits_{j=1}^{m-1}[gcd(i,j)==1]ij$

      $=sumlimits_{i=1}^{n-1}sumlimits_{j=1}^{m-1}ijsumlimits_{d|gcd(i,j)}mu(d)$

      $=sumlimits_{d=1}^{min(n-1,m-1)}mu(d)d^2lfloorfrac{n(n+1)}{2} floorlfloorfrac{m(m+1)}{2} floor$

      然后就可以根号询问了。

      得解。

  • 相关阅读:
    Node.js之使用Buffer类处理二进制数据
    node.js之require
    node.js之模块
    node.js之setTimeout()、clearTimeout()与 setInterval()与clearInterval()
    Node.js之包与npm包管理工具
    node.js基础知识
    运维之linux基础知识(一)
    node.js之调试器
    Ubuntu 18.04安装搜狗输入法
    微信小程序项目总结记账小程序(包括后端)
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/11524431.html
Copyright © 2020-2023  润新知