zoukankan      html  css  js  c++  java
  • luoguP2735 电网 Electric Fences

    一道校内模拟赛遇见的题

    ** 不会正解就真的很麻烦的 数学题 **

    有一种东西叫 皮克定理

    发现的千古神犇

    姓名:George Alexander Pick(所以叫皮克定理

    国籍:奥地利(蛤!竟然不是匈牙利。。。。。。

    皮克定理是干蛤的

      就是在一张网格纸上(对,就是网格纸,关于SPFA,他,死了),上面画着纵横两组平行线,相邻平行线之间的距离都相等,这样两组平行线的交点,就是所谓格点。如果取一个格点做原点O,取通过这个格点的横向和纵向两直线分别做X轴和Y轴,并取原来方格边长做单位长,建立一个坐标系。这时前面所说的格点,显然就是纵横两坐标都是整数的那些点。由于这个缘故,我们又叫格点为整点。

      一个多边形的顶点如果全是格点,这多边形就叫做格点多边形。有趣的是,这种格点多边形的面积计算起来很方便,只要数一下图形边线上的点的数目及图内的点的数目,就可用公式算出。

    公式是啥?

    公式:2S = 2a + b - 2

    其中a表示多边形内部的点数,b表示多边形边界上的点数,S表示多边形的面积。

    证明,不存在的。。。(光速逃离。。。

    题解:

    这题显然求的是a,2S可用m*p来求,b则用gcd来。

    所以,反向套公式就完事了。。。

    CODE:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #define ll long long
    
    using namespace std;
    
    inline ll gcd(ll x,ll y) {
    	return x % y == 0 ? y : gcd(y,x % y);
    }
    ll n,m,p;
    
    int main() {
    	//freopen("fence.in","r",stdin);
    	//freopen("fence.out","w",stdout);
    	scanf("%lld%lld%lld",&n,&m,&p);
    	ll s = p * m / 2;
    	ll cnt = (gcd(n,m) + gcd(abs(n - p),m) + p) / 2;
    	ll ans = s - cnt + 1;
    	printf("%lld
    ",ans);
    	return 0;
    }
    
    
    有些路你和某人一起走,就长得离谱,你和另外一些人走,就短得让人舍不得迈开脚步。
  • 相关阅读:
    LeetCode 485. Max Consecutive Ones
    LeetCode 367. Valid Perfect Square
    LeetCode 375. Guess Number Higher or Lower II
    LeetCode 374. Guess Number Higher or Lower
    LeetCode Word Pattern II
    LeetCode Arranging Coins
    LeetCode 422. Valid Word Square
    Session 共享
    java NIO
    非阻塞IO
  • 原文地址:https://www.cnblogs.com/Repulser/p/9579838.html
Copyright © 2011-2022 走看看