又一次遇到了碰撞类的题目,还是扩展gcd和同余模方程。上次博客的链接在这:http://www.cnblogs.com/zzyDS/p/5874440.html

  现在干脆解同余模直接按照套路来吧,如果有解,那么x先乘以(c/g),然后mod数是(b/g),就按照这个套路来好了- -。

  这题的思路大概是这样的,首先碰到墙壁的角肯定会在lcm(n,m)时刻发生,这之后是原路返回的,也就是说如果在这个时间之前都没有碰到的点一定是永远碰不到的。

  对每一个点(x0,y0)来说,解 2nx+(-)x0 = 2ny+(-)y0。其中x和y是变量,那么移项以后显然是同余模方程。我们关于x0和y前的符号作一下讨论,解四个方程,取最小即可。

  具体代码如下:

 #include <stdio.h>
#include <algorithm>
#include <string.h>
#include <iostream>
using namespace std;
typedef long long ll; ll n,m,k;
ll maxn; void ex_gcd(ll a,ll b,ll &x,ll &y,ll &g)
{
if(!b) {x=;y=;g=a;return;}
ex_gcd(b,a%b,y,x,g);
y -= a/b*x;
} ll work(ll dx,ll dy)
{
ll g,x,y;
ex_gcd(*n,*m,x,y,g);
ll c = dy - dx;
if(c % g) return maxn+; x *= (c/g);
ll mod = *m / g;
x = (x%mod + mod) % mod; ll temp = *n*x + dx;
if(temp< || temp>maxn) return maxn+;
else return temp;
} ll solve(ll x,ll y)
{
ll ans = maxn + ;
ans = min(ans,work(x,y));
ans = min(ans,work(-x,y));
ans = min(ans,work(x,-y));
ans = min(ans,work(-x,-y));
if(ans == maxn+) return -;
else return ans;
} int main()
{
cin >> n >> m >> k;
ll g = __gcd(n,m);
maxn = n / g * m;
while(k--)
{
ll x,y;
scanf("%I64d%I64d",&x,&y);
printf("%I64d\n",solve(x,y));
}
}

CodeForces 724C Ray Tracing(碰撞类,扩展gcd)的更多相关文章

  1. Codeforces 724C Ray Tracing 扩展欧几里得

    吐槽:在比赛的时候,压根就没想到这题还可以对称: 题解:http://blog.csdn.net/danliwoo/article/details/52761839 比较详细: #include< ...

  2. codeforces 724c Ray Tracing

    好题 原题: There are k sensors located in the rectangular room of size n × m meters. The i-th sensor is ...

  3. 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个点,求射 ...

  4. CF724C Ray Tracing 扩展欧几里得 平面展开

    LINK:Ray Tracing 虚这道题很久了 模拟赛考了一个加强版的 瞬间就想到了这道简化版的. 考虑做法 暴力模拟可能可以 官方正解好像就是这个. 不过遇到这种平面问题可以考虑把平面给无限的展开 ...

  5. Ray Tracing

    Ray Tracing 题目链接:http://codeforces.com/problemset/problem/724/C 拓展欧几里得 //为什么这次C题这么难啊=.= 可以观察到,光线在矩形中 ...

  6. 【Ray Tracing The Next Week 超详解】 光线追踪2-9

    我们来整理一下项目的代码 目录 ----include --hit --texture --material ----RTdef.hpp ----ray.hpp ----camera.hpp ---- ...

  7. 【Ray Tracing The Next Week 超详解】 光线追踪2-5

    Chapter 5:Image Texture Mapping 先看效果: 我们之前的纹理是利用的是撞击点p处的位置信息,比如大理石纹理 而我们今天的图片映射纹理采用2D(u,v)纹理坐标来进行. 在 ...

  8. 【Ray Tracing in One Weekend 超详解】 光线追踪1-10

    <Ray Tracing in One Weekend>完结篇 最近课程上机实验,封面图渲染时间也超长,所以写东西就落下了,见谅 这篇之后,我会继续<Ray Tracing The ...

  9. games101 - 4 - Ray Tracing

    games101 - 4 - Ray Tracing 目录 games101 - 4 - Ray Tracing 为什么需要Ray Tracing Recursive (Whitted-Style) ...

随机推荐

  1. Java 时间不一致

    1.new Date() 得到的时间?和系统相差 相差8个小时 2.eclipse控制台打印的时间与系统相差 相差8个小时 3.log4j日志的时间与与系统相差 相差8个小时 上述问题其实是同一个问题 ...

  2. 非常简约学生管理系统——HashSet进行编写

    很小的一个练习,可以参考一下啊~~~~~~ 1:注意:学生类中进行多个重要方法的重写 package com.xt.homework; public class Student { private S ...

  3. MFC六大核心机制

    MFC六大核心机制概述 我们选择了C++,主要是因为它够艺术.够自由,使用它我们可以实现各种想法,而MFC将多种可灵活使用的功能封装起来,我们岂能忍受这种“黑盒”操作?于是研究分析MFC的核心机制成为 ...

  4. 使用 “Unicode 字符集 ” 使用错误,应该使用 “使用多字节字符集”

    “void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)”: 不能将参数 1 从“const char ...

  5. JAVA语言程序设计课后习题----第三单元解析(仅供参考)

    1 本题水题,记住要知道输入格式即可 import java.util.Scanner; public class test { public static void main(String[] ar ...

  6. Nginx 无法重启

    报错如下 Starting nginx... nginx (pid)already running. 重启nginx时,说多个进程已存在,,, 执行 ps -ef | grep nginx 发现 有多 ...

  7. jvm出现OutOfMemoryError时处理方法/jvm原理和优化参考

    The heap stores all of the objects created by your java program.The heap's contents is monitored by ...

  8. linux wireless 基础知识 MAC80211 CFG80211

    转:http://blog.csdn.net/liuxd3000/article/details/23761663 1. 基本概念   • cfg80211:  用于对无线设备进行配置管理.与Full ...

  9. 《python解释器源码剖析》第7章--python中的set对象

    7.0 序 集合和字典一样,都是性能非常高效的数据结构,性能高效的原因就在于底层使用了哈希表.因此集合和字典的原理本质上是一样的,都是把值映射成索引,通过索引去查找. 7.1 PySetObject ...

  10. zabbix4.2Proxy安装文档

    zabbix4.2Proxy安装文档 目录 zabbix4.2Proxy安装文档    1 一.安装    2 1.前期安装准备    2 2.安装zabbix RPM源    3 2.1下载zabb ...