zoukankan      html  css  js  c++  java
  • 【GDKOI2017】 两个胖子萌萌哒 小学奥数题

    题目大意:给你一个$n imes m$的网格,你要在这个网格上画三角形。

    三角形的顶点只能在网格的整点上,且至少有一条边平行于$x$或$y$轴,且三角形面积为整数。问你能画多少个不同的三角形。

    两个三角形被判定为不同,当且仅当两个三角形所包含的点集不相同。

    多组询问,$n,m≤10^9$。

    这题是裸的小学奥数题。。。。

    我们先不管那个面积限制,先来看下有多少个三角形满足前两个条件。

    我们令三角形的一边平行于$x$轴,我们考虑枚举底边,显然底边有$ dfrac {m(m+1)(n+1)} {2}$种不同的取法(不同的位置,长度)

    然后,我们枚举三角形的顶点,显然不能跟底边位于同一个$x$轴上,那么有$n(m+1)$种取法。

    平行与$y$轴的情况同理。

    但是这么算会将直角三角形的数量算重,我们考虑减去这些三角形

    我们考虑枚举三角形的直角顶点位置以及两边边长,这个相当于是在两条长度分别为$n$和$m$的线段上截取两段出来,方案数显然为$dfrac{m(m+1)n(n+1)}{4}$种。

    然后,考虑到枚举出的一组线段,共有$4$种构造的方法,故方案数要$ imes 4$。

    我们成功求出了三角形的数量。

    考虑这些三角形中不合法的数量,不合法的三角形,显然底边和高的长度均为奇数。

    我们考虑将网格格点进行黑白染色,记 $n1=lceil dfrac{n}{2} ceil $,$n2=lfloor dfrac{n}{2} floor $。$m1,m2$同理。

    那么显然,一个不合法的,且底边与$x$轴平行的三角形,底边两点的横坐标必然一个为奇,一个为偶数的,方案数为$n1 imes n2$。

    下面考虑枚举底边和顶点的纵坐标,显然底边和顶点所在的纵坐标必须一个为奇,一个为偶,方案数为$2m1 imes m2$,顶点横坐标显然有n中选法。

    故与$x$轴平行的不合法三角形总共有$2n1 imes n2 imes m1 imes m2 imes n$个。

    底边与$y$轴平行的三角形同理。

    考虑不合法的直角三角形,数量为$4n1 imes n2 imes m1 imes m2$。(枚举两条边边长,直角朝向)。

    然后就没有了 

     

  • 相关阅读:
    UITableView的一些事1
    Mac修改文件权限:You don’t have permission to save the file
    svn: is already a working copy for a different url 解决办法
    svn服务配置
    github push出错(1)You can't push to git:// Use https://
    判断系统版本
    浅谈 Qt 布局那些事
    Qt布局管理
    详解 QT 主要类 QWidget
    新手须知 QT类大全
  • 原文地址:https://www.cnblogs.com/xiefengze1/p/9863610.html
Copyright © 2011-2022 走看看