Codeforces 724C Ray Tracing 扩展欧几里得
吐槽:在比赛的时候,压根就没想到这题还可以对称;
题解:http://blog.csdn.net/danliwoo/article/details/52761839
比较详细;
#include<iostream> #include<cstring> #include<cstdio> #include<cstdlib> #include<algorithm> #include<iomanip> #include<map> #include<set> #include<vector> #include<ctime> #include<cmath> #define LL long long using namespace std; #define LL long long #define up(i,j,n) for(int i=(j);(i)<=(n);(i)++) #define max(x,y) ((x)<(y)?(y):(x)) #define min(x,y) ((x)<(y)?(x):(y)) #define FILE "1" const int maxn=101000; const LL inf=10000000000000LL; int n,m,k; void init(){scanf("%d%d%d",&n,&m,&k); } void gcd(LL a,LL b,LL &d,LL &x,LL &y){if(b==0){d=a;x=1;y=0;return;}gcd(b,a%b,d,x,y);int t=x;x=y;y=t-a/b*x;return; } LL t(LL a,LL b,LL c,LL &x,LL &y ){LL d;gcd(a,b,d,x,y);if(c%d)return -1;LL ran=b/d;if(ran<0)ran=-ran;x*=c/d;x=(x%ran+ran)%ran;return 0; } LL get(LL x,LL y,LL maxx){LL K,S;if(t(2*n,-2*m,y-x,K,S)==-1)return maxx+1;LL ans=2*K*n+x;if(ans<0||ans>maxx)return maxx+1;return ans; } LL gcd(LL a,LL b){return b?gcd(b,a%b):a;} LL work(LL x,LL y){LL maxx=1LL*n/gcd(n,m)*m;LL minn=maxx+1;minn=min(get(x,y,maxx),minn);minn=min(get(-x,y,maxx),minn);minn=min(get(x,-y,maxx),minn);minn=min(get(-x,-y,maxx),minn);if(minn==maxx+1)return -1;else return minn; } void slove(){init();up(i,1,k){LL x,y;scanf("%I64d%I64d",&x,&y);printf("%I64d\n",work(x,y));} } int main(){slove(); }
View Code
转载于:https://www.cnblogs.com/chadinblog/p/5943097.html
Codeforces 724C Ray Tracing 扩展欧几里得相关推荐
- CodeForces - 724C Ray Tracing(扩展欧几里得解方程)
题目链接:点击查看 题目大意:在 n∗mn*mn∗m 的矩阵中,从点 (0,0)(0,0)(0,0) 发射一个小球,以四十五度的方向出发,速度是 2\sqrt{2}2,当碰到壁时,会进行反射:当碰到 ...
- Ray Tracing(扩展欧几里得,ax+by=c最小解)
C. Ray Tracing time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- 扩展欧几里得求多组解CodeForces - 1244C
扩展欧几里得求多组解 扩展欧几里得可以求得满足ax+by = c的一组解(这里c%gcd(a,b)要等于0):假如求得的解为(x0 , y0),G = gcd(a , b),这时我们可以发现(x0 + ...
- Codeforces7C 扩展欧几里得
Line Time Limit: 1000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Submit Status ...
- 扩展欧几里得 POJ 1061
感觉这道题目的数据好水啊...我的代码我都觉得姿势特别奇怪...竟然还过了... 好吧,原来不是姿势奇怪,而是逆元需要用的时候是余数也需要的时候,这里的余数是不需要的,所以就AC了 就说一下碰到的问题 ...
- 求逆元(线性求逆元)及其扩展欧几里得
线性求逆元模板: int inv[maxn]; void initInverse(){inv[1] = 1;for(int i = 2; i <= maxn; i++)inv[i] = (p - ...
- poj-青蛙的约会(扩展欧几里得)nyoj-小柯的约会
由题意可列出方程 x + m * s - (y + n * s) = k * l; 化简得 (n-m)*s + k*l = x - y 化简得 (n-m)*s = x - y (mod l); ...
- [模板]欧几里得算法/扩展欧几里得
最大公因数(欧几里得算法) $gcd(a,b)=gcd(b\%a,a)$(不一定需要a<b) $gcd(0,b)=b$ 1 inline int gcd(int a,int b){ 2 retu ...
- “景驰科技杯”2018年华南理工大学程序设计竞赛 H-对称与反对称(扩展欧几里得求逆元)
题目链接 题目描述: 给出一个N*N的方阵A.构造方阵B,C: 使得A = B + C.其中 B为对称矩阵,C为反对称矩阵. 对于方阵S中的任意元素,若(S)ij = (S)ji,则称S为对称矩阵 对 ...
最新文章
- android AIDL IPC深入分析
- ytu 1057: 输入两个整数,求他们相除的余数(带参的宏 + 模板函数 练习)
- 【UESTC 594】我要长高
- 模式规则及自动化变量
- 使用SAP ABAP BSP应用实现一个环状的进度条
- 476B. Dreamoon and WiFi
- windows + cmake + vs2019 编程
- matplolib绘图
- json session cookie介绍和使用
- PMP第五版第一次考试相关提醒
- Matlab并行编程cellfun arrayfun
- 我为什么离开国企,回到互联网内卷?
- 在anaconda环境下搭建python3.5 + jupyter sparkR,scala,pyspark
- 时间片轮转调度算法模拟(Linux-C语言)
- MAHLE PIS 3097/2.2 bar
- SWIG简介 | win10和Linux下的安装--亲测 | (一)
- 【QT】缺少Qt5Widgetsd.dll等文件的问题
- (windows)Hexo博客建站$ npm install -g hexo-cli时遇到npm ERR! Response timeout……的解决方案
- java PDF转换图片(IMG)
- SpringBoot发送QQ邮件图片显示不出来