博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LuoGu P2735 电网 Electric Fences
阅读量:5299 次
发布时间:2019-06-14

本文共 938 字,大约阅读时间需要 3 分钟。

这个东西,本来我是用求出两条一次函数解析式然后判断在x坐标下的y坐标值来做的

首先因为没考虑钝角三角形,WA了

然后又因为精度处理不好又WA了

一气之下,只能去网上查了查那个皮克定理

首先用皮克定理需要知道:在(0,0)到(n,m)这条线段上的整点个数有gcd(n,m)+1个,至于怎么证明,我没有深究(会用不就完了

这是对于一条过原点的线段,不过原点的线段呢?我是这样理解的:我把坐标系的原点平移到了该线段的的某个端点上,以这个点的坐标为原点,把上面的式子写出来,然后......就解决了

皮克定理:在网格点中三角形的面积: 2S = 2a + b - 2(我太懒了,复制一个吧

其中,s表示三角形面积,a表示图形内点数,b为图形边界上的点数

然后利用推导公式(不就是逆用嘛):a=(2s-b+2)/2就行了。

但是嘞,又是该死的精度!

这样会造成一定的精度丢失,那怎么办?

尽量减少除法就行了!

把公式改为a=s-b/2+1,这样精度的问题就可以忽略了,然后就A掉了呢

#include 
#include
#include
#include
#include
#define max(a,b) (a>b?a:b)#define k1 (double(m)/double(n))#define k2 (double(m)/double(n-p))#define b (-p*k2)using namespace std;double n,m,p;double tot;int main(){ scanf("%lf%lf%lf",&n,&m,&p); tot=double(__gcd((int)n,(int)m)+__gcd((int)fabs(p-n),(int)m)+p); printf("%.0lf\n",p*m/2-tot/2+1); return 0;}

转载于:https://www.cnblogs.com/Equinox-Flower/p/9600573.html

你可能感兴趣的文章
Spring面试题
查看>>
窥视SP2010--第一章节--SP2010开发者路线图
查看>>
MVC,MVP 和 MVVM 的图示,区别
查看>>
C语言栈的实现
查看>>
代码为什么需要重构
查看>>
TC SRM 593 DIV1 250
查看>>
SRM 628 DIV2
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
Python-S9-Day127-Scrapy爬虫框架2
查看>>
使用Chrome(PC)调试移动设备上的网页
查看>>
使用gitbash来链接mysql
查看>>
SecureCRT的使用方法和技巧(详细使用教程)
查看>>
右侧导航栏(动态添加数据到list)
查看>>
81、iOS本地推送与远程推送详解
查看>>
虚拟DOM
查看>>
uva 11468 Substring
查看>>
自建数据源(RSO2)、及数据源增强
查看>>
BootStrap2学习日记2--将固定布局换成响应式布局
查看>>
关于View控件中的Context选择
查看>>
2018icpc徐州OnlineA Hard to prepare
查看>>