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;
    }
    
    
    有些路你和某人一起走,就长得离谱,你和另外一些人走,就短得让人舍不得迈开脚步。
  • 相关阅读:
    golang以服务方式运行
    nginx重写规则配置
    PHP的 parse_ini_file 解析配置文件
    在Yii2中集成Markdown编辑器
    理解 is_callable
    Composer安装yii2-imagine 压缩,剪切,旋转,水印
    Yii2 基于header 实现接口版本控制
    (1) laravel php artisan list make
    php 阿里云国内短信实例
    php 云片国外短信实例
  • 原文地址:https://www.cnblogs.com/Repulser/p/9579838.html
Copyright © 2011-2022 走看看