吐槽:在比赛的时候,压根就没想到这题还可以对称;

题解: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 扩展欧几里得相关推荐

  1. CodeForces - 724C Ray Tracing(扩展欧几里得解方程)

    题目链接:点击查看 题目大意:在 n∗mn*mn∗m 的矩阵中,从点 (0,0)(0,0)(0,0) 发射一个小球,以四十五度的方向出发,速度是 2\sqrt{2}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 ...

  3. 扩展欧几里得求多组解CodeForces - 1244C

    扩展欧几里得求多组解 扩展欧几里得可以求得满足ax+by = c的一组解(这里c%gcd(a,b)要等于0):假如求得的解为(x0 , y0),G = gcd(a , b),这时我们可以发现(x0 + ...

  4. Codeforces7C 扩展欧几里得

    Line Time Limit: 1000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Submit Status ...

  5. 扩展欧几里得 POJ 1061

    感觉这道题目的数据好水啊...我的代码我都觉得姿势特别奇怪...竟然还过了... 好吧,原来不是姿势奇怪,而是逆元需要用的时候是余数也需要的时候,这里的余数是不需要的,所以就AC了 就说一下碰到的问题 ...

  6. 求逆元(线性求逆元)及其扩展欧几里得

    线性求逆元模板: int inv[maxn]; void initInverse(){inv[1] = 1;for(int i = 2; i <= maxn; i++)inv[i] = (p - ...

  7. poj-青蛙的约会(扩展欧几里得)nyoj-小柯的约会

    由题意可列出方程 x + m * s - (y + n * s) = k * l; 化简得   (n-m)*s + k*l = x - y 化简得   (n-m)*s = x - y (mod l); ...

  8. [模板]欧几里得算法/扩展欧几里得

    最大公因数(欧几里得算法) $gcd(a,b)=gcd(b\%a,a)$(不一定需要a<b) $gcd(0,b)=b$ 1 inline int gcd(int a,int b){ 2 retu ...

  9. “景驰科技杯”2018年华南理工大学程序设计竞赛 H-对称与反对称(扩展欧几里得求逆元)

    题目链接 题目描述: 给出一个N*N的方阵A.构造方阵B,C: 使得A = B + C.其中 B为对称矩阵,C为反对称矩阵. 对于方阵S中的任意元素,若(S)ij = (S)ji,则称S为对称矩阵 对 ...

最新文章

  1. android AIDL IPC深入分析
  2. ytu 1057: 输入两个整数,求他们相除的余数(带参的宏 + 模板函数 练习)
  3. 【UESTC 594】我要长高
  4. 模式规则及自动化变量
  5. 使用SAP ABAP BSP应用实现一个环状的进度条
  6. 476B. Dreamoon and WiFi
  7. windows + cmake + vs2019 编程
  8. matplolib绘图
  9. json session cookie介绍和使用
  10. PMP第五版第一次考试相关提醒
  11. Matlab并行编程cellfun arrayfun
  12. 我为什么离开国企,回到互联网内卷?
  13. 在anaconda环境下搭建python3.5 + jupyter sparkR,scala,pyspark
  14. 时间片轮转调度算法模拟(Linux-C语言)
  15. MAHLE PIS 3097/2.2 bar
  16. SWIG简介 | win10和Linux下的安装--亲测 | (一)
  17. 【QT】缺少Qt5Widgetsd.dll等文件的问题
  18. (windows)Hexo博客建站$ npm install -g hexo-cli时遇到npm ERR! Response timeout……的解决方案
  19. java PDF转换图片(IMG)
  20. SpringBoot发送QQ邮件图片显示不出来

热门文章

  1. spring入门-----spring中遍历各种集合
  2. android 特色输入输出
  3. h5的横线_CSS文字两边添加横线的几种方法
  4. Linux应急响应实战
  5. Spring Boot学习笔记-进阶(3)
  6. JavaScript进阶4-学习笔记
  7. TensorFlow学习笔记(一)安装、配置、基本用法
  8. RTA广告能力的应用场景剖析
  9. Elasticsearch自定排序插件实现
  10. 机器学习基础——支持向量机