计蒜客 15967 Windows 画图 题解
来源:互联网 发布:2017网络统考报名时间 编辑:程序博客网 时间:2024/06/05 05:23
题意
在 Windows 的“画图”工具里,可以绘制各种各样的图案。可以把画图当做一个标准的二维平面,在其上先后绘制了 n 条颜色互不相同的线段。
按绘制的时间顺序,从先到后把线段依次编号为 1 到 n。第 i 条线段的两个端点分别为 (xai ,yai) 和 (xbi,ybi),线段的粗细忽略不计。后绘制的线段不会改变之前绘制的线段的位置。
请写一个程序,回答 q 组询问,每组询问给出一个坐标 (xi,yi),你需要算出在这个点上最后绘制的线段编号。
思路
对于每一条线段,求出向量横纵坐标最大公约数,那么每一次横坐标加上向量横坐标除这个最大公约数的值,纵坐标加上向量纵坐标除以这个最大公约数的值,就可以到达下一个整点,不过横着的线段和竖着的线段要特殊处理,每一次更新到的点的答案,最后对于每组询问直接输出答案即可
代码
#include <cstdio>#include <cmath>#include <cstdlib>int ans[251][251];int gcd(int a,int b){ if(a%b==0) return b; else if(b%a==0) return a; else if(a>b) return gcd(b,a%b); else return gcd(a,b%a);}int main(){ int n,m,xa,ya,xb,yb,g,xadd,yadd,q,x,y; scanf("%d%d",&n,&m); for(int k=1;k<=n;k++) { scanf("%d%d%d%d",&xa,&ya,&xb,&yb); if(xa!=xb&&ya!=yb) { g=gcd(abs(xa-xb),abs(ya-yb)); xadd=(xb-xa)/g; yadd=(yb-ya)/g; } else if(xa==xb) { xadd=0; yadd=(yb-ya)/abs(yb-ya); } else { xadd=(xb-xa)/abs(xb-xa); yadd=0; } for(int i=xa,j=ya;i!=xb&&j!=yb;i+=xadd,j+=yadd) ans[i][j]=k; ans[xb][yb]=k; } scanf("%d",&q); for(int i=0;i<q;i++) { scanf("%d%d",&x,&y); printf("%d\n",ans[x][y]); } return 0;}
阅读全文
0 0
- 计蒜客 15967 Windows 画图 题解
- 计蒜客复赛B题 Windows 画图
- CCF 201409-2 画图 题解
- CCF 201512-3 画图 题解
- windows画图常用函数
- Windows画图使用总结
- Windows gnuplot 画图教程
- 计蒜客-2017 计蒜之道 复赛-B-Windows 画图
- Windows GDI画图闪烁解决方法
- windows自带画图软件
- windows画图常用函数 二
- windows画图,矩形,剪裁区
- 在windows phone上画图
- windows下python画图matplotlib
- windows画图(解题报告)
- C#仿windows画图工具
- ccf真题-201512-3-画图AC题解
- windows画图程序用到的主要API
- linux(ubuntu)跳板机连接和文件传输
- 使用Wercker进行持续构建与发布
- 数据向:618价格到底~到底是不是最低?
- 数据库分库分表(sharding)(一) 拆分实施策略和示例演示
- intellij idea foreach快捷键
- 计蒜客 15967 Windows 画图 题解
- 【笔记一】【1A课程】android开发-初识view
- kotlin基础
- android 崩溃日志收集与上传
- IIS如何共享文件夹
- 利用js实现禁用浏览器后退
- go语言实现的GM邮件功能:全服邮件和多人邮件的发送
- 点在多边形内算法,C#判断一个点是否在一个复杂多边形的内部
- [论文学习]Deep Learning Based Recommendation: A Survey