• 「AGC036A Triangle」


    题目大意

    在一个 (10^9 imes10^9) 的平面上,需要找到三个整点,使得三点构成的三角形的面积 (=frac{S}{2}).

    分析

    对于 (Sleq 10^9) 显然可以直接放在 ({(0,0),(s,0),(s,1)}),不多展开.

    如果构造出来的三角形有一条边是与坐标平行的话显然 (S) 就必须要是这条边长度的位置,且这条边的长度必定是在 (1)(10^9) 范围内的整数,显然是不能满足于所以的 (S) 的.所以需要换一种想法去构造.

    使用与所有平面上的三角形的面积公式除了海伦公式,还会想到一个 ( exttt{面积}=frac{ exttt{水平宽} imes exttt{铅垂高}}{2}),在这里也就是 (S=) 水平宽( imes) 铅垂高,因为水平宽必定是整数,所以可以很自然地得出铅垂高 (=frac{S}{ exttt{水平宽}}),将铅垂高的整数部分和小数部分分别表示为 (a,b),也就是说 (a=lfloorfrac{S}{ exttt{水平宽}} floor),因为 (a) 要在 (1)(10^9) 的范围内,所以可以将水平宽取到 (10^9),那么 (b=frac{Smod 10^9}{10^9}),也就是需要构造出 (1 imes 10^{-9},2 imes 10^{-9},3 imes 10^{-9},dots,(10^9-1) imes 10^{-9}),那么也可以想到连接 ((0,0))((10^9,1)) 的线段,在这条线段上恰好包含了上面所以的小数,而高度可以直接整除得到,于是可以构造出 ({(0,0),(10^9,1),(10^9-Smod 10^9,lfloorfrac{S}{10^9} floor+1)}).(不理解可以画图理解).

    以上做法在 (S=10^{18}) 的时候计算出来的高度大于了 (10^9),所以需要特判这种情况.

    代码

    核心代码就三行,没啥必要了吧.

  • 相关阅读:
    MatrixTraceTransform主要逻辑在transform方法中
    重写LayoutParams,读取子View自定义属性
    onLayout初始化裁剪信息
    drawChild中画阴影,裁剪出圆角
    继承ConstraintLayout
    如何创建自定义的Resource实例
    mysql优化整理(索引)
    java设计模式
    Oracle中MERGE语句的使用
    BigDecimal 转成 double
  • 原文地址:https://www.cnblogs.com/Sxy_Limit/p/13887527.html
Copyright © 2020-2023  润新知