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 ...
随机推荐
- 20155305乔磊2016-2017-2《Java程序设计》第十周学习总结
20155305乔磊2016-2017-2<Java程序设计>第十周学习总结 教材学习内容总结 Java的网络编程 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据. ...
- 嵌入式C语言——提取时分秒
嵌入式C语言--提取时分秒 题目: 相关知识点 提取位: 插入位 用宏定义定义地址 #define TIME_Addr 0xFFFFC0000 #define TIME *(volatile int ...
- 20145226夏艺华 网络对抗技术 EXP7 网络欺诈技术防范
20145226夏艺华 网络对抗技术 EXP7 网络欺诈技术防范 实践内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. · 简单应用SET工具建立冒名网站 · ett ...
- windows phone 8.1 让项目开启蓝牙genericAttributeProfile
1.打开项目里面的 Package.appxmanifest 文件 找到<Capabilities>节点,添加代码如下,其中 serviceId:6006 可以自己修改值 <m2: ...
- java Hibernate UUID代码
package mypack; import java.io.Serializable; import java.net.InetAddress; /** * 唯一主键生成办法.从Hibernate中 ...
- slqite3练习
连接 import sqlite3 con = sqlite3.connect(":memory:") c = con.cursor() # Create table c.exec ...
- Qt开发者关于QThread的咆哮——你们都用错了
Qt开发者关于QThread的咆哮——你们都用错了 我们(Qt用户)正广泛地使用IRC来进行交流.我在Freenode网站挂出了#qt标签,用于帮助大家解答问题.我经常看到的一个问题(这让我不厌其烦) ...
- SaltStack入门篇(七)之架构部署实战
模块:https://docs.saltstack.com/en/2016.11/ref/states/all/index.html 实战架构图: 实验环境设置: 主机名 IP地址 角色 linux- ...
- selenium webdriver API详解(三)
本系列主要讲解webdriver常用的API使用方法(注意:使用前请确认环境是否安装成功,浏览器驱动是否与谷歌浏览器版本对应) 一:获取页面元素的文本内容:text 例:获取我的博客名字文本内容 代码 ...
- 第三篇 Python关于mysql的API--pymysql模块, mysql事务
python关于mysql的API--pymysql模块 pymysql是Python中操作MySQL的模块,其使用方法和py2的MySQLdb几乎相同. 模块安装 pip install pymys ...