更好的阅读体验

Portal

Portal1: Codeforces

Portal2: Luogu

Description

Recently a Golden Circle of Beetlovers was found in Byteland. It is a circle route going through \(n \cdot k\) cities. The cities are numerated from \(1\) to \(n \cdot k\), the distance between the neighboring cities is exactly \(1\) km.

Sergey does not like beetles, he loves burgers. Fortunately for him, there are \(n\) fast food restaurants on the circle, they are located in the \(1\)-st, the \((k + 1)\)-st, the \((2k + 1)\)-st, and so on, the \(((n-1)k + 1)\)-st cities, i.e. the distance between the neighboring cities with fast food restaurants is \(k\) km.

Sergey began his journey at some city \(s\) and traveled along the circle, making stops at cities each \(l\) km (\(l > 0\)), until he stopped in \(s\) once again. Sergey then forgot numbers \(s\) and \(l\), but he remembers that the distance from the city \(s\) to the nearest fast food restaurant was \(a\) km, and the distance from the city he stopped at after traveling the first \(l\) km from \(s\) to the nearest fast food restaurant was \(b\) km. Sergey always traveled in the same direction along the circle, but when he calculated distances to the restaurants, he considered both directions.

Now Sergey is interested in two integers. The first integer \(x\) is the minimum number of stops (excluding the first) Sergey could have done before returning to \(s\). The second integer \(y\) is the maximum number of stops (excluding the first) Sergey could have done before returning to \(s\).

Input

The first line contains two integers \(n\) and \(k\) (\(1 \le n, k \le 100\,000\)) — the number of fast food restaurants on the circle and the distance between the neighboring restaurants, respectively.

The second line contains two integers \(a\) and \(b\) (\(0 \le a, b \le \frac{k}{2}\)) — the distances to the nearest fast food restaurants from the initial city and from the city Sergey made the first stop at, respectively.

Output

Print the two integers \(x\) and \(y\).

Sample Input1

2 3
1 1

Sample Output1

1 6

Sample Input2

3 2
0 0

Sample Output2

1 3

Sample Input3

1 10
5 3

Sample Output3

5 5

Hint

In the first example the restaurants are located in the cities \(1\) and \(4\), the initial city \(s\) could be \(2\), \(3\), \(5\), or \(6\). The next city Sergey stopped at could also be at cities \(2, 3, 5, 6\). Let's loop through all possible combinations of these cities. If both \(s\) and the city of the first stop are at the city \(2\) (for example, \(l = 6\)), then Sergey is at \(s\) after the first stop already, so \(x = 1\). In other pairs Sergey needs \(1, 2, 3\), or \(6\) stops to return to \(s\), so \(y = 6\).

In the second example Sergey was at cities with fast food restaurant both initially and after the first stop, so \(l\) is \(2\), \(4\), or \(6\). Thus \(x = 1\), \(y = 3\).

In the third example there is only one restaurant, so the possible locations of \(s\) and the first stop are: \((6, 8)\) and \((6, 4)\). For the first option \(l = 2\), for the second \(l = 8\). In both cases Sergey needs \(x=y=5\) stops to go to \(s\).

Solution

我们根据题目的\(a, b, k\)计算出\(l\)的\(4\)种可能:

  1. \(a + b\)

  2. \(k - a + b\)

  3. \(k + a - b\)

  4. \(k - a - b\)

每走一步的答案就是\(\frac{n \times k}{\gcd(n \times k, step)}\)。

然后枚举找个最大的与最小的就可以了。

Code

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath> using namespace std; typedef long long LL;
const LL INF = 1e18;
LL n, k, a, b, step;
int main() {
scanf("%lld%lld%lld%lld", &n, &k, &a, &b);
LL Max = -INF, Min = INF;
step = fabs(a + b);//第1种情况
while (step <= n * k) {//枚举步数
if (step) {
Max = max(Max, n * k / __gcd(n * k, step));
Min = min(Min, n * k / __gcd(n * k, step));
}
step += k;
}
step = fabs(k - a + b);//第2种情况
while (step <= n * k) {//枚举步数
if (step) {
Max = max(Max, n * k / __gcd(n * k, step));
Min = min(Min, n * k / __gcd(n * k, step));
}
step += k;
}
step = fabs(k - b + a);//第3种情况
while (step <= n * k) {//枚举步数
if (step) {
Max = max(Max, n * k / __gcd(n * k, step));
Min = min(Min, n * k / __gcd(n * k, step));
}
step += k;
}
step = fabs(k - a - b);//第4种情况
while (step <= n * k) {//枚举步数
if (step) {
Max = max(Max, n * k / __gcd(n * k, step));
Min = min(Min, n * k / __gcd(n * k, step));
}
step += k;
}
printf("%lld %lld\n", Min, Max);
return 0;
}

『题解』Codeforces1142A The Beatles的更多相关文章

  1. 『题解』洛谷P1063 能量项链

    原文地址 Problem Portal Portal1:Luogu Portal2:LibreOJ Portal3:Vijos Description 在\(Mars\)星球上,每个\(Mars\)人 ...

  2. 『题解』Codeforces1142B Lynyrd Skynyrd

    更好的阅读体验 Portal Portal1: Codeforces Portal2: Luogu Description Recently Lynyrd and Skynyrd went to a ...

  3. 『题解』洛谷P1993 小K的农场

    更好的阅读体验 Portal Portal1: Luogu Description 小\(K\)在\(\mathrm MC\)里面建立很多很多的农场,总共\(n\)个,以至于他自己都忘记了每个农场中种 ...

  4. 『题解』洛谷P2296 寻找道路

    更好的阅读体验 Portal Portal1: Luogu Portal2: LibreOJ Description 在有向图\(\mathrm G\)中,每条边的长度均为\(1\),现给定起点和终点 ...

  5. 『题解』洛谷P1351 联合权值

    更好的阅读体验 Portal Portal1: Luogu Portal2: LibreOJ Description 无向连通图\(\mathrm G\)有\(n\)个点,\(n - 1\)条边.点从 ...

  6. 『题解』Codeforces656E Out of Controls

    更好的阅读体验 Portal Portal1: Codeforces Portal2: Luogu Description You are given a complete undirected gr ...

  7. 『题解』洛谷P2170 选学霸

    更好的阅读体验 Portal Portal1: Luogu Description 老师想从\(N\)名学生中选\(M\)人当学霸,但有\(K\)对人实力相当,如果实力相当的人中,一部分被选上,另一部 ...

  8. 『题解』洛谷P1083 借教室

    更好的阅读体验 Portal Portal1: Luogu Portal2: LibreOJ Portal3: Vijos Description 在大学期间,经常需要租借教室.大到院系举办活动,小到 ...

  9. 『题解』Codeforces9D How many trees?

    更好的阅读体验 Portal Portal1: Codeforces Portal2: Luogu Description In one very old text file there was wr ...

随机推荐

  1. 对BFC规范的理解

    什么是BFC? BFC 全称为 块级格式化上下文(Block Fromatting Context),是Web页面的可视化CSS渲染出的一部分.它是块级盒布局出现的区域,也是浮动层元素进行交互的区域. ...

  2. github仓库添加MIT许可

    俩种方法 1.新建仓库 直接在选择添加即可如下图: 2.为已创建仓库后添加MIT协议 直接在给工程根目录添加LICENSE文件提交即可,内容是 MIT License Copyright (c) 年份 ...

  3. 总结下var、let 和 const 的区别

    一.var变量 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  4. C#中的等值判断1

    目录 简介 值类型和引用类型的相等比较 和相等比较相关的函数 string 和 System.Uri 的等值比较 泛型接口 IEquatable<T> 自定义比较方法 举例 总结 简介 最 ...

  5. 8 个 Python 实用脚本,【速】收藏备用!

    脚本写的好,下班下得早!程序员的日常工作除了编写程序代码,还不可避免地需要处理相关的测试和验证工作. 例如,访问某个网站一直不通,需要确定此地址是否可访问,服务器返回什么,进而确定问题在于什么.完成这 ...

  6. 大型php网站性能和并发访问优化方案

    网站性能优化对于大型网站来说非常重要,一个网站的访问打开速度影响着用户体验度,网站访问速度慢会造成高跳出率,小网站很好解决,那对于大型网站由于栏目多,图片和图像都比较庞大,那该怎么进行整体性能优化呢? ...

  7. Redis 哨兵机制以及灾难演练

    #### 哨兵都采用这个配置即可 ##### 1.修改sentinel.conf配置文件 ![image](https://img2018.cnblogs.com/blog/1334966/20191 ...

  8. Did You AK Today? (今天你AK了吗?)

    考虑到本文读者年龄原因,本文改为使用简体中文撰写. 题目描述 今有正整数 n,kn,kn,k,求 1−n1-n1−n 共 nnn 个数的全排列,按字典序的第 kkk 个. 数据满足 1≤n≤105,1 ...

  9. photometric_stereo halcon光度立体法三维表面重建

    官方文档翻译 名称: photometric_stereo -- 通过光度立体技术重建表面. 签名: photometric_stereo(Images : HeightField, Gradient ...

  10. 【原】centos上安装newman

    1.安装node/npm 1.Newman(因为Newman是node编写,需要依赖nodejs):可以使用先下载安装包到 /usr/local路径下 /usr/local# wget https:/ ...