zoukankan      html  css  js  c++  java
  • 「考试」夜莺与玫瑰

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

      考后看题解。

      发现$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$

      然后就可以根号询问了。

      得解。

  • 相关阅读:
    JS——ajax login test
    Java——Java日期转Sql日期
    JDK动态代理实现原理
    Java 动态代理机制分析及扩展,第 1 部分
    Java枚举类
    Java强引用、 软引用、 弱引用、虚引用
    取模运算
    java集合框架
    字节和unicode
    编译原理随笔
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/11524431.html
Copyright © 2011-2022 走看看