Codeforces 724C Ray Tracing 扩展欧几里得
来源:互联网 发布:java字符串拼接工具类 编辑:程序博客网 时间:2024/05/29 23:47
标签: 解题报告 数学
原题见CF 724C
n*m的矩形内有k个点,四周有围墙围起来。从(0,0)45度发射小球,速度为
分析
把矩形对称展开,最后小球在横纵坐标均为
原坐标为
即要解方程
求ax+by=c最小正整数解,坑点:ran<0时不搞成正数会出错!
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; //wa point x = (x%ran + ran) % ran; return 0;}
代码
/*-------------------------------------------- * 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; 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;}
0 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
- 数据库隔离级别
- Android actionBar 修改背景色
- so文件的简单分析
- 杭电1003的解决方法
- [leetcode]3. Longest Substring Without Repeating Characters
- Codeforces 724C Ray Tracing 扩展欧几里得
- 一道Java面试题之实现复制、删除、剪切文件(文件夹的实现)的snippet
- 【63.63%】【codeforces 724A】Checking the Calendar
- 电路板排针拆除(拔出)方法
- 输入一个整数,将各位数字反转后输出
- [codeforces]A. Checking the Calendar 水题
- java应用程序
- 虚存管理技术
- 操作系统分类