[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) 继续补题.因为看见同学打了这场,而且涨分还不错,所以觉得这套题目可能会比较有意思. 因为下午要开学了,所以恐怕暂时不能把这套题目补 ...
随机推荐
- ArrayList与LinkList对比
本文简要总结一下java中ArrayList与LinkedList的区别,这在面试中也是常常会问到的一个知识点. 先来看一下ArrayList和LinkedList的关系是怎样的: 从继承体系可以看到 ...
- 当学术邂逅浪漫 – 记MobiCom 2015大会
作者:微软亚洲研究院主管研究员 刘云新 今年的MobiCom大会在著名的浪漫之都巴黎举行.通常于欧洲举办的会议的参会人数会相对少一些,但今年的MobiCom大会吸引了近400人参加,绝不少于往年.浪漫 ...
- 《人性与暴力-论暴力侵略》ER
card level 人名卡 反常识卡 世界发生了什么? - 信息爆炸 信息与信任构成了人类发展两大命题 人性史与暴力史 未来世界会变得怎么样?- 历史不会重复,但会押韵.暴力呈现下降. 改变世界的三 ...
- Linux用户组的添加及属性的更改
用户组的创建: 12345 groupadd [OPTION] 组名 -g GID 指明GID号:[GID_MIN, GID_MAX] -r 创建系统组 CentOS 6: ID<500 Cen ...
- Go技术日报(2020-02-28)
go 语言中文网(每日资讯)_2020-02-28 一.Go 语言中文网 Gopher 学习效率低怎么办?曹大谈工程师应该怎么学习 Go 的 http 包中默认路由匹配规则 [每日一库]Web 表单验 ...
- 8.【Spring Cloud Alibaba】配置管理-Nacos
使用Nacos管理配置 架构图 配置文件遵循的格式 bootstrap.yml pom.xml <dependency> <groupId>org.springframewor ...
- java反序列化-ysoserial-调试分析总结篇(5)
前言: 这篇文章继续分析commonscollections5,由如下调用链可以看到此时最外层的类不是annotationinvoke,也不是priorityqueue了,变成了badattribut ...
- 快速上手百度大脑EasyDL专业版·物体检测模型(附代码)
作者:才能我浪费991. 简介:1.1. 什么是EasyDL专业版EasyDL专业版是EasyDL在2019年10月下旬全新推出的针对AI初学者或者AI专业工程师的企业用户及开发者推出的A ...
- DUBBO 面试灵魂18问
一.Dubbo 是什么 dubbo 是一个分布式框架,是一个远程服务调用的分布式框架,其核心部分包含: 1)集群容错: 提供基于接口方法的透明远程过程调用,包含多协议支持,以及软负债均衡.失败容错.地 ...
- vue 项目总结,以及对未来的理解,对性能方面的认知
之前自己写了一个vue项目,因为没有经验,所以很多方面的提升做的不好,比如说路由.比如说ajax都没有封装,比如说业务逻辑和通用逻辑都混合在一起,导致大片大片重复的代码累积.忽悠忽悠没入门的前端感觉还 ...