☆ Codeforces 724C Ray Tracing 扩展欧几里得 + 计算几何
来源:互联网 发布:花生壳域名ip解析失败 编辑:程序博客网 时间:2024/05/29 16:28
转载的,然而我并看不懂。。。希望以后能够看懂,觉得是个好题
There are k sensors located in the rectangular room of size n × m meters. The i-th sensor is located at point (xi, yi). All sensors are located at distinct points strictly inside the rectangle.
Opposite corners of the room are located at points (0, 0)and (n, m). Walls of the room are parallel to coordinate axes.
At the moment 0, from the point (0, 0) the laser ray is released in the direction of point (1, 1). The ray travels with a speed of meters per second. Thus, the ray will reach the point (1, 1) in exactly one second after the start.
When the ray meets the wall it's reflected by the rule that the angle of incidence is equal to the angle of reflection. If the ray reaches any of the four corners, it immediately stops.
For each sensor you have to determine the first moment of time when the ray will pass through the point where this sensor is located. If the ray will never pass through this point, print - 1 for such sensors.
The first line of the input contains three integers n, m and k(2 ≤ n, m ≤ 100 000, 1 ≤ k ≤ 100 000) — lengths of the room's walls and the number of sensors.
Each of the following k lines contains two integers xi andyi (1 ≤ xi ≤ n - 1, 1 ≤ yi ≤ m - 1) — coordinates of the sensors. It's guaranteed that no two sensors are located at the same point.
Print k integers. The i-th of them should be equal to the number of seconds when the ray first passes through the point where the i-th sensor is located, or - 1 if this will never happen.
3 3 41 11 22 12 2
1-1-12
3 4 61 12 11 22 21 32 3
1-1-125-1
7 4 51 32 25 15 34 3
13295-1
In the first sample, the ray will consequently pass through the points (0, 0), (1, 1), (2, 2), (3, 3). Thus, it will stop at the point (3, 3) after 3 seconds.
In the second sample, the ray will consequently pass through the following points: (0, 0), (1, 1), (2, 2), (3, 3), (2, 4),(1, 3), (0, 2), (1, 1), (2, 0), (3, 1), (2, 2), (1, 3), (0, 4). The ray will stop at the point (0, 4) after 12 seconds. It will reflect at the points (3, 3), (2, 4), (0, 2), (2, 0) and (3, 1).
n*m的矩形内有k个点,四周有围墙围起来。从(0,0)45度发射小球,速度为
分析
把矩形对称展开,最后小球在横纵坐标均为
原坐标为
即要解方程
/*-------------------------------------------- * File Name: CF 724C * Author: Danliwoo * Mail: Danliwoo@outlook.com * Created Time: 2016-10-08 23:37:05--------------------------------------------*/#include <bits/stdc++.h>using namespace std;#define LL long longLL n, m;LL extend_Euclid(LL a, LL b, LL &x, LL &y){ if(b==0){ x = 1; y = 0; return a; } LL r = extend_Euclid(b, a%b, y, x); y -= a/b*x; return r;}LL equation(LL a, LL b, LL c, LL &x, LL &y){ LL g = extend_Euclid(a, b, x, y); if(c % g) return -1; LL ran = b / g; x *= c/g; if(ran < 0) ran = -ran; //ran < 0 时候要变成正数 x = (x%ran + ran) % ran; return 0;}LL gao(LL dx, LL dy, LL M) { LL k, s; if(equation(2*n, -2*m, -dx+dy, k, s) == -1) return M + 1; LL tx = 2 * k * n + dx; if(tx < 0 || tx > M) return M + 1; return tx;}LL minL(LL a, LL b) { return a < b ? a : b;}LL solve(LL x, LL y) { LL g = __gcd(n, m); LL maxx = 1LL * m / g * n; LL ans = maxx + 1; ans = minL(ans, gao(-x, -y, maxx)); ans = minL(ans, gao(-x, y, maxx)); ans = minL(ans, gao(x, -y, maxx)); ans = minL(ans, gao(x, y, maxx)); if(ans == maxx + 1) return -1; return ans;}int main() { int k; while(~scanf("%I64d%I64d%d", &n, &m, &k)) { for(int i = 0;i < k;i++) { LL x, y; scanf("%I64d%I64d", &x, &y); printf("%I64d\n", solve(x, y)); } } return 0;}
- ☆ Codeforces 724C Ray Tracing 扩展欧几里得 + 计算几何
- Codeforces 724C Ray Tracing 扩展欧几里得
- CodeForece 724C Ray Tracing 扩展欧几里得
- Codeforces 724C Ray Tracing
- codeforces724c Ray Tracing(扩展欧几里得)
- codefoces 724 c Ray Tracing (扩展欧几里德)
- Codeforces 724C Ray Tracing 模拟
- Codeforces 724C Ray Tracing(模拟)
- Codeforces 724C Ray Tracing(exgcd)
- codeforces724C. Ray Tracing(扩展欧几里得详解)
- codeforces724C. Ray Tracing(扩展欧几里得详解)
- Ray Tracing(扩展欧几里得,ax+by=c最小解)
- Codeforce 724C. Ray Tracing By Assassin
- cf 724CRay Tracing(扩展欧几里得)
- codeforce C. Ray Tracing
- C. Ray Tracing
- C. Ray Tracing
- Codeforces Intel Code Challenge Final Round C.Ray Tracing
- BZOJ2277: [Poi2011]Strongbox
- 从0开始学习 GITHUB 系列之「GIT 速成」
- 结汇
- 更改ORACLE归档路径及归档模式
- FFMPEG结构体分析:AVFrame(解码后的数据)
- ☆ Codeforces 724C Ray Tracing 扩展欧几里得 + 计算几何
- poj 2051
- View.setTag(key,object)异常:The key must be an application-specific resource id.
- Gabor滤波进行目标图像纹理特征的提取
- Python学习
- 用CSS3的clip-path样式进行图片的裁剪
- JQuery 层次选择器
- 阿里巴巴开源项目:分布式数据库同步系统otter(解决中美异地机房)
- Android_照相机Camera_调用系统照相机返回data为空