[gcd,灵感] Codeforces 1200C Round Corridor
题目:https://codeforces.com/contest/1200/problem/C
1 second
256 megabytes
standard input
standard output
Amugae is in a very large round corridor. The corridor consists of two areas. The inner area is equally divided by nn sectors, and the outer area is equally divided by mm sectors. A wall exists between each pair of sectors of same area (inner or outer), but there is no wall between the inner area and the outer area. A wall always exists at the 12 o'clock position.
The inner area's sectors are denoted as (1,1),(1,2),…,(1,n)(1,1),(1,2),…,(1,n) in clockwise direction. The outer area's sectors are denoted as (2,1),(2,2),…,(2,m)(2,1),(2,2),…,(2,m) in the same manner. For a clear understanding, see the example image above.
Amugae wants to know if he can move from one sector to another sector. He has qq questions.
For each question, check if he can move between two given sectors.
The first line contains three integers nn, mm and qq (1≤n,m≤10181≤n,m≤1018, 1≤q≤1041≤q≤104) — the number of sectors in the inner area, the number of sectors in the outer area and the number of questions.
Each of the next qq lines contains four integers sxsx, sysy, exex, eyey (1≤sx,ex≤21≤sx,ex≤2; if sx=1sx=1, then 1≤sy≤n1≤sy≤n, otherwise 1≤sy≤m1≤sy≤m; constraints on eyey are similar). Amague wants to know if it is possible to move from sector (sx,sy)(sx,sy) to sector (ex,ey)(ex,ey).
For each question, print "YES" if Amugae can move from (sx,sy)(sx,sy) to (ex,ey)(ex,ey), and "NO" otherwise.
You can print each letter in any case (upper or lower).
4 6 3
1 1 2 3
2 6 1 2
2 6 2 4
YES
NO
YES
Example is shown on the picture in the statement.
题意:
有一个圆形迷宫分2层,在12点钟方向有一面墙隔住了第1层和第2层,第1层被n-1面墙平均分为n份,
第2层被m-1面墙平均分为m份,给这些区域按层数和墙分割的部分标上坐标,现在又q个询问,每次询问
给出2个坐标,问这两个坐标对应的部分是否可达
思路:
一开始就想如果要判断可达的情况就要先知道什么时候不可达,不可达就是两层的墙位置重合把路口堵住了,
那么就要知道在什么情况下墙会重合,因为12点钟方向有墙,我们可以把这个圆形迷宫拉伸成两条直线来处理,
观察题目的图发现,1层被分为了4份,2层被分为了6份,4和6的gcd是2,这样就被分为2个2份+3份,每一个2份+3份之内是可达的,
但它们之间是不可达的,因为被墙堵住了,也就是说,求出它们的gcd就知道了能被分为多少份,看2个坐标是不是在同一份中就可知道它们之间是否可达,
当然这只是个猜想,不过试了几个样例之后发现是可以的,于是写了成代码后竟然过了,有时候还是要大胆猜想,灵感很重要
在实现时有一个问题,就是比如题目图片中的样例,(1,1),(1,2),(2,1),(2,2),(2,3)是互相可达的,如果第1层则y/=(n/gcd(n,m)),如果第2层则y/=(m/gcd(n,m))
如果最后两个y相等,则说明他们在同一个可达区域内,但有一个问题,1/2=0,2/2=1,1/3=0,2/3=0,3/3=1,可以发现y%(n/gcd(n,m))==0或y%(m/gcd(n,m))==0的地方除了(n/gcd(n,m))或(m/gcd(n,m))之后多了1,
但他们应该和前面的分为一类,所以当y%(n/gcd(n,m))==0或y%(m/gcd(n,m))==0时我们把他们的y减1,这样就可以和他们前面的分为一类了
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll gcd(ll a,ll b){
return b?gcd(b,a%b):a;
}
int main(){
ll n,m,q,sx,sy,ex,ey;
cin>>n>>m>>q;
ll g=gcd(n,m),na=n/g,ma=m/g; ///算gcd和各自要除的数
while(q--){
cin>>sx>>sy>>ex>>ey;
if(g==){printf("YES\n");continue;} ///如果他们互质则任意坐标都相互可达,因为只有一个连通类
if(sx==){if(sy%na==)sy--;sy/=na;} ///如果是第一层,如果y是na的倍数,则y要-1,再把y/=na
else{if(sy%ma==)sy--;sy/=ma;} ///否则是第二层,如果y是ma的倍数,则y要-1,再把y/=ma
if(ex==){if(ey%na==)ey--;ey/=na;} ///与上同理
else{if(ey%ma==)ey--;ey/=ma;}
if(sy==ey)printf("YES\n"); ///如果处理过后的y相等,则说明这两个坐标在同一个连通类内,输出YES
else printf("NO\n"); ///否则输出NO
}
}
/**
有一个圆形迷宫分2层,在12点钟方向有一面墙隔住了第1层和第2层,第1层被n-1面墙平均分为n份,
第2层被m-1面墙平均分为m份,给这些区域按层数和墙分割的部分标上坐标,现在又q个询问,每次询问
给出2个坐标,问这两个坐标对应的部分是否可达
一开始就想如果要判断可达的情况就要先知道什么时候不可达,不可达就是两层的墙位置重合把路口堵住了,
那么就要知道在什么情况下墙会重合,因为12点钟方向有墙,我们可以把这个圆形迷宫拉伸成两条直线来处理,
观察题目的图发现,1层被分为了4份,2层被分为了6份,4和6的gcd是2,这样就被分为2个2份+3份,每一个2份+3份之内是可达的,
但它们之间是不可达的,因为被墙堵住了,也就是说,求出它们的gcd就知道了能被分为多少份,看2个坐标是不是在同一份中就可知道它们之间是否可达,
当然这只是个猜想,不过试了几个样例之后发现是可以的,于是写了成代码后竟然过了,有时候还是要大胆猜想,灵感很重要
在实现时有一个问题,就是比如题目图片中的样例,(1,1),(1,2),(2,1),(2,2),(2,3)是互相可达的,如果第1层则y/=(n/gcd(n,m)),如果第2层则y/=(m/gcd(n,m))
如果最后两个y相等,则说明他们在同一个可达区域内,但有一个问题,1/2=0,2/2=1,1/3=0,2/3=0,3/3=1,可以发现y%(n/gcd(n,m))==0或y%(m/gcd(n,m))==0的地方除了(n/gcd(n,m))或(m/gcd(n,m))之后多了1,
但他们应该和前面的分为一类,所以当y%(n/gcd(n,m))==0或y%(m/gcd(n,m))==0时我们把他们的y减1,这样就可以和他们前面的分为一类了
**/
[gcd,灵感] Codeforces 1200C Round Corridor的更多相关文章
- 【CodeForces - 1200C】Round Corridor (数论gcd)
Round Corridor Descriptions Amugae位于一个非常大的圆形走廊中.走廊由两个区域组成.内部区域等于nñ扇区,外部区域等于m米部门.在相同区域(内部或外部)的每对扇区之间 ...
- CodeForces Global Round 1
CodeForces Global Round 1 CF新的比赛呢(虽然没啥区别)!这种报名的人多的比赛涨分是真的快.... 所以就写下题解吧. A. Parity 太简单了,随便模拟一下就完了. B ...
- Codeforces Beta Round #73 (Div. 2 Only)
Codeforces Beta Round #73 (Div. 2 Only) http://codeforces.com/contest/88 A 模拟 #include<bits/stdc+ ...
- Codeforces Beta Round #67 (Div. 2)
Codeforces Beta Round #67 (Div. 2) http://codeforces.com/contest/75 A #include<bits/stdc++.h> ...
- Codeforces Beta Round #16 (Div. 2 Only)
Codeforces Beta Round #16 (Div. 2 Only) http://codeforces.com/contest/16 A 水题 #include<bits/stdc+ ...
- Codeforces Beta Round #9 (Div. 2 Only)
Codeforces Beta Round #9 (Div. 2 Only) http://codeforces.com/contest/9 A gcd水题 #include<bits/stdc ...
- Codeforces Global Round 1 (A-E题解)
Codeforces Global Round 1 题目链接:https://codeforces.com/contest/1110 A. Parity 题意: 给出{ak},b,k,判断a1*b^( ...
- Codeforces Global Round 3
Codeforces Global Round 3 A. Another One Bites The Dust 有若干个a,有若干个b,有若干个ab.你现在要把这些串拼成一个串,使得任意两个相邻的位置 ...
- Codeforces Global Round 1 (CF1110) (未完结,只有 A-F)
Codeforces Global Round 1 (CF1110) 继续补题.因为看见同学打了这场,而且涨分还不错,所以觉得这套题目可能会比较有意思. 因为下午要开学了,所以恐怕暂时不能把这套题目补 ...
随机推荐
- C#利用反射调用PB编译的COM组件
问题: 1.根据COM组件的ProgID,得到COM组件公开的类型 2.创建COM组件提供的类型的对象 3.调用执行方法 正确姿势 C#利用反射调用(后期绑定)PB编译的COM组件 C#调用COM组件 ...
- ARTS 第 1 周
每周一道算法.点评一篇英文技术文章.学习一个技术技巧.分享一个技术观点和思路 Algorithm 题目:两数和 给定一个整数数组,返回这两个数字的索引,使它们相加为一个指定的数. 因为是返回两个数字的 ...
- seaJs模块化开发简单入门
随着前端技术的日益成熟,功能越来越丰富强大,规范也越来越健全,在这样的背景环境下很快便有了CommonJs.AMD.CMD等一系列规范,使前端发开趋向模块化.规范化.CMD模块化的代表之一就是国内开发 ...
- oracle中group by 和order by同时存在时
关键点:order by 的栏位必须在group by 中有:例如:select name from TABLE group by name ,id order by id asc
- ueditor富文本编辑器——上传图片按钮卡顿,响应慢
最近负责将公司官网从静态网站改版成动态网站,方便公司推广营销人员修改增加文案,避免官网文案维护过于依赖技术人员.在做后台管理系统时用到了富文本编辑器Ueditor,因为公司有一个阿里云文件资源服务器, ...
- 算法入门——二分查找,旅行商问题,大O表示法
一. 算法入门 博主在市面上发现了很多,很多有关书算法的书籍,但是真正能够让初学者易懂的算法书籍,只是一点点,以下我讲以 Aditya Bhargava写的一本关于算法的入门书籍,为参考,这本书非常的 ...
- cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'mvc:resources'.
新的错误出现 spring-mvc.xml文件 <mvc:resources mapping="/static/**" location="/static/&qu ...
- 关于localStorage面试的那点事
最近面试的时候关于html5API总会被问到localStorage的问题, 对于一般的问题很简单,无非就是 localStorage.sessionStorage和cookie这三个客户端缓存的区别 ...
- HBuilder-X 关闭eslint-vue 插件语法检查
HBuilder-X 在写vue项目的时候发现,代码在保存的时候回自动检查eslint语法,会报一大堆的红色警告! 这时候就很烦人,看着不爽,看了下eslint 配置里面介绍了关闭语法检查的配置-- ...
- intel硬件视频加速介绍
目录 硬件视频加速技术 intel 硬件加速技术 intel 的开源媒体栈 VA-API 安装 样例 Intel Quick Sync(QSV) API支持情况 vaapi/mfx比较 安装 样例 硬 ...