【文文殿下】【CF724C】Ray Tracing (中国剩余定理)
题解
我们考虑将棋盘扩大一倍,这样相当于取膜。然后,我们只要对x,y,的位置分类讨论,做四次crt就行。具体细节看文文代码。
#include<cstdio>
#include<algorithm>
typedef long long ll;
const ll inf = 1000000000000LL;
int a[10],m[10];
inline ll exgcd(ll a,ll b,ll &x,ll &y) {
if(b==0) {
x=1;y=0;
return a;
}
ll d = exgcd(b,a%b,x,y);
ll tmp = x;
x=y;
y=tmp-a/b*y;
return d;
}
inline ll China() {
ll A=a[1],M=m[1],k,y;
for(int i = 2;i<=2;++i) {
ll d = exgcd(M,m[i],k,y),mod=(m[i]/d),c=a[i]-A;
if(c%d) return inf;
k=(k*c/d%mod+mod)%mod;
A+=k*M;M*=m[i]/d;A=(A+M)%M;
}
return A;
}
inline ll solve(ll x,ll y) {
a[1]=x;
a[2]=y;
return China();
}
int aa,bb,k;
int main() {
//freopen("test.in","r",stdin);
scanf("%d%d%d",&aa,&bb,&k);
while(k--) {
m[1]=2*aa;
m[2]=2*bb;
int x,y;
scanf("%d%d",&x,&y);
ll ans = inf;
ans=std::min(ans,solve(x,y));
ans=std::min(ans,solve(x,m[2]-y));
ans=std::min(ans,solve(m[1]-x,y));
ans=std::min(ans,solve(m[1]-x,m[2]-y));
if(ans==inf) puts("-1");
else printf("%lld\n",ans);
}
return 0;
}
【文文殿下】【CF724C】Ray Tracing (中国剩余定理)的更多相关文章
- CF724C Ray Tracing 扩展欧几里得 平面展开
LINK:Ray Tracing 虚这道题很久了 模拟赛考了一个加强版的 瞬间就想到了这道简化版的. 考虑做法 暴力模拟可能可以 官方正解好像就是这个. 不过遇到这种平面问题可以考虑把平面给无限的展开 ...
- CF724C: Ray Tracing
传送门 CF的题质量真心不低,这道题的标准解法(应该)是exgcd,打比赛的时候想到了具体的推导公式了,也意识到了需要用exgcd,但是因为寝室要锁门了(其实就是太弱,就放弃了. 首先很显然,这条线所 ...
- ACM/ICPC 之 中国剩余定理+容斥原理(HDU5768)
二进制枚举+容斥原理+中国剩余定理 #include<iostream> #include<cstring> #include<cstdio> #include&l ...
- 中国剩余定理(Chinese Remainder Theorem)
我理解的中国剩余定理的含义是:给定一个数除以一系列互素的数${p_1}, \cdots ,{p_n}$的余数,那么这个数除以这组素数之积($N = {p_1} \times \cdots \tim ...
- 51nod1079(中国剩余定理)
题目链接: http://www.51nod.com/onlineJudge/user.html#!userId=21687 题意: 中文题诶~ 思路: 本题就是个中国剩余定理模板题,不过模拟也可以过 ...
- HDU 5446 中国剩余定理+lucas
Unknown Treasure Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other ...
- OpenCascade Ray Tracing Rendering
OpenCascade Ray Tracing Rendering eryar@163.com 摘要Abstract:OpenCascade6.7.0中引入了光线跟踪算法的实现.使用光线跟踪算法可实现 ...
- poj1006生理周期(中国剩余定理)
/* 中国剩余定理可以描述为: 若某数x分别被d1..….dn除得的余数为r1.r2.….rn,则可表示为下式: x=R1r1+R2r2+…+Rnrn+RD 其中R1是d2.d3.….dn的公倍数,而 ...
- poj 1006:Biorhythms(水题,经典题,中国剩余定理)
Biorhythms Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 110991 Accepted: 34541 Des ...
随机推荐
- windows常用运行命令总结
开始→运行→命令集锦 winver---------检查Windows版本 wmimgmt.msc----打开windows管理体系结构(WMI) wupdmgr--------windows更新程序 ...
- sqlserver数据库维护常用sql
1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- 创建 备份 ...
- DB2中的数据类型
DB2中的数据类型DB2内置数据类型可以分成数值型(numeric).字符串型(character string).图形字符串(graphic string).二进制字符串型(binary strin ...
- php调java接口
1.下载二进制的 JavaBridge.jar包.java/Java.inc库文件,下载地址:http://php-java-bridge.sourceforge.net/pjb/download.p ...
- hdu-1251(string+map)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 思路:重点是用gets输入,而且用a[20],不能直接输入string类型的. #include ...
- ImageResizer 3.4.3配置
<?xml version="1.0" encoding="utf-8"?> <!-- For more information on how ...
- flask_数据库
我们将使用 Flask-SQLAlchemy扩展来管理我们应用程序的数据.这个扩展封装了SQLAlchemy 项目,这是一个 对象关系映射器 或者 ORM.ORMs 允许数据库应用程序与对象一起工作, ...
- Linux下一个简单sniffer的实现
Sniffer(嗅探器)是一种基于被动侦听原理的网络分析方式.将网络接口设置在监听模式,便可以将网上传输的源源不断的信息截获.对于网络监听的基本原理我们不在赘述,我们也不开启网卡的混杂模式,因为现在的 ...
- gj12-1 协程和异步io
1 并发.并行.同步.异步.阻塞.非阻塞 并发.并行 并发是报一个时间段内有几个程序在同一个cpu上运行,但是任意时刻只有一个程序在cpu上运行.在一个时间段内某一个请求很快,能够响应的用户就越多,高 ...
- linux下mysql命令大全
1.linux下启动mysql的命令: mysqladmin start /ect/init.d/mysql start (前面为mysql的安装路径) 2.linux下重启mysql的命令: mys ...