CF724C Ray Tracing 扩展欧几里得 平面展开
LINK:Ray Tracing
虚这道题很久了 模拟赛考了一个加强版的 瞬间就想到了这道简化版的。
考虑做法 暴力模拟可能可以 官方正解好像就是这个。
不过遇到这种平面问题可以考虑把平面给无限的展开。
考虑展开之后点的坐标的通项 2kn +/- x 2km +/- y.
这个可以画图发现 那么就可以得到4个方程。
暴力解开 考虑遇到四个角就停止的问题 那么这个值必须要小于LCM(n,m).
显然 同时要保证合法的话需要>0.
容易发现方程只需要解一次 所以复杂度为 k+logn.
(真是ex死我了
ll n,m,k;
ll lcm,g,maxx;
ll xx,yy,ww;
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline void exgcd(ll a,ll b)
{
if(!b){xx=1,yy=0;ww=a;return;}
exgcd(b,a%b);
ll z=xx;xx=yy;yy=z-a/b*yy;
return;
}
inline ll solve(ll x,ll y)
{
ll c=y-x;
if(c%ww)return -1;
ll b=-m/ww;
c/=ww;b=abs(b);
ll w1=(xx*c%b+b)%b;
ll ans=n*w1+x;
return ans<=0||ans>=lcm?-1:ans;
}
signed main()
{
freopen("1.in","r",stdin);
n=read();m=read();k=read();
g=gcd(n,m);lcm=n*m/g;
n=n*2;m=m*2;
exgcd(n,-m);
for(ll i=1;i<=k;++i)
{
ll w,x,y;maxx=INF;
x=read();y=read();
if(!x&&!y){printf("0\n");continue;}
w=solve(x,y);if(w!=-1)maxx=min(maxx,w);
w=solve(x,-y);if(w!=-1)maxx=min(maxx,w);
w=solve(-x,y);if(w!=-1)maxx=min(maxx,w);
w=solve(-x,-y);if(w!=-1)maxx=min(maxx,w);
printf("%lld\n",maxx==INF?-1:maxx);
}
return 0;
}
CF724C Ray Tracing 扩展欧几里得 平面展开的更多相关文章
- Codeforces 724C Ray Tracing 扩展欧几里得
吐槽:在比赛的时候,压根就没想到这题还可以对称: 题解:http://blog.csdn.net/danliwoo/article/details/52761839 比较详细: #include< ...
- Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C.Ray Tracing (模拟或扩展欧几里得)
http://codeforces.com/contest/724/problem/C 题目大意: 在一个n*m的盒子里,从(0,0)射出一条每秒位移为(1,1)的射线,遵从反射定律,给出k个点,求射 ...
- C. Ray Tracing——披着搜索外衣的扩展欧几里得
[题目大意] 给你一个n*m的矩形,光线从(0,0)出发,沿右上方向以每秒根号2米的速度运动,碰到矩形边界就会反弹(符合物理规律的反弹),询问k个点,这些点都在矩形内部且不在矩形边界上,求光经过这些点 ...
- UVA 12169 Disgruntled Judge 枚举+扩展欧几里得
题目大意:有3个整数 x[1], a, b 满足递推式x[i]=(a*x[i-1]+b)mod 10001.由这个递推式计算出了长度为2T的数列,现在要求输入x[1],x[3],......x[2T- ...
- UVA 10090 Marbles 扩展欧几里得
来源:http://www.cnblogs.com/zxhl/p/5106678.html 大致题意:给你n个球,给你两种盒子.第一种盒子每个盒子c1美元,可以恰好装n1个球:第二种盒子每个盒子c2元 ...
- POJ 1061 青蛙的约会 扩展欧几里得
扩展欧几里得模板套一下就A了,不过要注意刚好整除的时候,代码中有注释 #include <iostream> #include <cstdio> #include <cs ...
- 【64测试20161112】【Catalan数】【数论】【扩展欧几里得】【逆】
Problem: n个人(偶数)排队,排两行,每一行的身高依次递增,且第二行的人的身高大于对应的第一行的人,问有多少种方案.mod 1e9+9 Solution: 这道题由1,2,5,14 应该想到C ...
- poj 2891 扩展欧几里得迭代解同余方程组
Reference: http://www.cnblogs.com/ka200812/archive/2011/09/02/2164404.html 之前说过中国剩余定理传统解法的条件是m[i]两两互 ...
- poj 2142 扩展欧几里得解ax+by=c
原题实际上就是求方程a*x+b*y=d的一个特解,要求这个特解满足|x|+|y|最小 套模式+一点YY就行了 总结一下这类问题的解法: 对于方程ax+by=c 设tm=gcd(a,b) 先用扩展欧几里 ...
随机推荐
- 数据库基础02-MYSQL的事务
Mysql的事务 1.基本概念 事务本质是一组SQL操作,事务中的语句要么全部执行成功,或者全部执行失败. 2.如何保证一个事务:四个特性(ACID) 原子性 (Automic) ...
- DLL注入之修改PE静态注入
DLL注入之修改PE静态注入 0x00 前言 我们要注入的的力量功能是下载baidu首页数据.代码如下: #include "stdio.h" #include"stdi ...
- java 面向对象(十九):关键字:static
static:静态的1.可以用来修饰的结构:主要用来修饰类的内部结构属性.方法.代码块.内部类2.static修饰属性:静态变量(或类变量) 2.1 属性,是否使用static修饰,又分为:静态属性 ...
- pointer-events:none 的应用
相信很多人都遇到过 Retina屏的1px边框 的问题. 很多人都用 :before,:after 伪类 eg: .div:after { position: absolute; top: 0; ...
- db2数据库创建删除主键约束和创建删除唯一键约束
创建.删除唯一约束: db2 "alter table tabname add unique(colname)" db2 "alter table tabname dro ...
- OSCP Learning Notes - Enumeration(2)
HTTP Enumeration Target Host IP: 10.0.0.20 Brute Forcing using DirBuster 1. Start the dirbuster and ...
- Python Hacking Tools - Password Sniffing
Password Sniffing with Scapy 1. Download and install the Scapy first. pip install scapy https://scap ...
- 【JVM之内存与垃圾回收篇】JVM与Java体系结构
JVM与Java体系结构 前言 作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题? 运行着的线上系统突然卡死,系统无法访问,甚至直接OOMM! 想解决线上JVM GC问题,但却无从下手. 新 ...
- 一张图就可以完美解决Java面试频次最高、GG最高的题目!快点收藏
如果要问Java面试频次最高的题目,那么我想应该是HashMap相关了. 提到HahMap,必然会问到是否线程安全?然后牵扯出ConcurrentHashMap等,接着提及1.7和1.8实现上的区分, ...
- 高效C++:模板和泛型编程
模板和泛型编程的关注重点在编译期,所有的行为都在编译期确定,因此其规则和玩法也有自己特殊的一套,和其他模块不通用. 了解隐式接口和编译期多态 元编程------编译器多态,决定哪个重载函数被调用 cl ...