SPOJ4717——Grid Points in a Triangle
题目的意思很简单。就是要你求出斜率为a/b的一个点在原点,一条边为x=n的RT三角形里面有多少个整数点?
看完题目后依然没有思路,依然去看各个神牛写的题解。后来才反应过来。
题目的正解应该是这样的。递归求解。
假如对于当前dfs(n,a,b)表示我们要求解斜率为a/b,且横坐标不超过n的整点数目。
如果a>b,那么我们可以统计在在内部包含的点数为=a/b个等腰直角三角形所包含的点的数目+dfs(n,a%b,b)。
好好理解上面这个式子,这也算是第一个难点吧。
d=a*n/b;
至此,我们可以保证a<b了,于是我们把三角形补全为平行四边形,这样相当于递归求dfs(d,b,a)了。
但是中间有一些难点细节,比如其实对于整点数目来说,平行四边形按对角线平分为两个直角三角形中的整点数目不一定是相等的,而且还有对角线上面的点重复添加了,所以要考虑减出来,减多了的又要加回去。详见代码:跟神犇的很相似,诶,数论嘛。
#include <cstdio>
#define ll long long
using namespace std; ll gcd(ll a,ll b)
{
return b==?a:gcd(b,a%b);
} ll dfs(ll n,ll a,ll b)
{
ll t=n*(n+)/*(a/b);
a%=b;
if (a==) return t+n+;//a==0说明与x轴重合了,点数为n+1。原来还要考虑有多少倍等腰直角三角形的点数。
ll d=a*n/b;
t+=(n+)*(d+)+d/a+;//平行四边形另一半减多了的要加回来。
return t-dfs(d,b,a);//减去四边形中另一半的点数。
} int main()
{
ll a,b,n,t,g;
scanf("%lld",&t);
while (t--)
{
scanf("%lld%lld%lld",&n,&a,&b);
g=gcd(a,b);
printf("%lld\n",dfs(n,a/g,b/g));//如果不除以gcd,答案会出错。
}
return ;
}
SPOJ4717——Grid Points in a Triangle的更多相关文章
- BZOJ2831(小强的金字塔系列问题--区域整点数求法)
题目:2831: 小强的金字塔 题意就是给出A,B,C,R,L,然后求 这里其实用到扩展欧几里德.(基本上参照clj的解题报告才理解的) 分析:我们先来分析一般情况: 这里我们假设A<C和B&l ...
- POJ 1265 Area POJ 2954 Triangle Pick定理
Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5227 Accepted: 2342 Description ...
- 论文阅读笔记三十七:Grid R-CNN(CVPR2018)
论文源址:https://arxiv.org/abs/1811.12030 开源代码:未公开 摘要 本文提出了目标检测网络Grid R-CNN,其基于网格定位机制实现准确的目标检测.传统方法主要基于回 ...
- R实战:grid包
grid包是一个底层的绘图系统,能够灵活地控制图形输出的外观和布局,但是grid包不提供创建完整图形的高级绘图系统,例如,ggplot2和lattice,而是提供绘制开发这些高级绘图的基础接口,例如: ...
- HDU 2018 Multi-University Training Contest 1 Triangle Partition 【YY】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6300 Triangle Partition Time Limit: 2000/1000 MS (Java ...
- HDU 多校对抗赛 C Triangle Partition
Triangle Partition Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Oth ...
- 2018HDU多校训练一 C -Triangle Partition
Chiaki has 3n3n points p1,p2,-,p3np1,p2,-,p3n. It is guaranteed that no three points are collinear. ...
- Spring-2-B Save the Students(SPOJ AMR11B)解题报告及测试数据
Save the Students Time Limit:134MS Memory Limit:0KB 64bit IO Format:%lld & %llu Descri ...
- PICK定理模板
PICK定理: S=I+O/2-1 S为多边形面积,I多边形内部的格点,O是多边形边上的格点 其中边上格点求法: 假设两个点A(x1,y1),B(x2,y2) 线段AB间格点个数为gcd(abs(x1 ...
随机推荐
- echarts y轴,显示数据,但不显示竖线
在yAxis中插入: axisLine: {show:false}, axisTick: {show:false}, yAxis : [ { show:true, axisLine: {show:fa ...
- BZOJ2140_稳定婚姻_KEY
题目传送门 暴力直接对于每个点跑一遍二分图匹配,能拿四十分. 然而我们考虑正解. 对于一对Couple我们建♂->♀的一条边,对于一对曾经有恋情的情侣我们建♀->♂的一条边. 跑Tarja ...
- lamp环境搭建(centos6.9+apache2.4+mysql5.7+php7.1)
lamp环境搭建(centos6.9+apache2.4+mysql5.7+php7.1) 安装前准备:CentOS 6.9 64位 最小化安装 yum install -y make gcc gcc ...
- Scratch3.0设计的插件系统(上篇)
我们每个人在内心深处都怀有一个梦想: 希望创造出一个鲜活的世界,一个宇宙.处在我们生活的中间.被训练为架构师的那些人,拥有这样的渴望: 在某一天,在某一个地方,因为某种原因,创造出了一个不可思议的.美 ...
- C#反射的简单示例
反射(Reflection)可以在运行时获 得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的名称.限定符和参数等反正说白了就 ...
- PHP导出Excel,设置表格样式,填充颜色等较为复杂样式
// 注:只是在此做下记录,有兴趣的可以参考,不做实际教程文档 <?php //引入Li类对数据进行操作include_once('./Li.php');//引入Excel类库对对数据进行操作i ...
- 初遇python进程
计算机硬件组成 主板 固化(寄存器,是直接和cpu进行交互的一个硬件) cpu 中央处理器:计算(数字计算和逻辑计算)和控制(控制所有硬件协调工作) 存储 硬盘,内存 输入设备 键盘,鼠标,话筒 输出 ...
- HTTP 两种基本请求方法 GET和 POST的区别
GET方法 1.GET交互方式是从服务器上获取数据,而并非修改数据,所以GET交互方式是安全的.就像数据库查询一样,从数据库查询数据,并不会影响数据库的数据信息,对数据库来说,也就是安全的.2.GET ...
- 测试Websocket建立通信,使用protobuf格式交换数据
接到一个应用测试,应用实现主要使用websocket保持长链接,使用protobuf格式交换数据,用途为发送消息,需要我们测试评估性能,初步评估需要测试长链接数.峰值消息数以及长期运行稳定性 整体需求 ...
- 转载-找圆算法((HoughCircles)总结与优化-霍夫变换
原文链接: http://www.opencv.org.cn/forum.php?mod=viewthread&tid=34096 找圆算法((HoughCircles)总结与优化 Ope ...