博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CF1142A The Beatles
阅读量:4603 次
发布时间:2019-06-09

本文共 1017 字,大约阅读时间需要 3 分钟。

思路:

令p表示步数,l表示步长。由于p是使(l * p) % (n * k) == 0的最小的p,所以p = (n * k) / gcd(n * k, l).

设l = k * x + r,则由题意可知r有四种可能的取值,分别是(a + b) % k, ((-a + b) % k + k) % k, ((a - b) % k + k) % k, ((-a - b) % k + k) % k,枚举各种情况计算即可。

实现:

1 #include 
2 using namespace std; 3 typedef long long ll; 4 const ll INF = 0x3f3f3f3f3f3f3f3f; 5 ll n, k; 6 void solve(ll r, ll & minn, ll & maxn) 7 { 8 for (int x = r ? 0 : 1; k * x + r <= n * k; x++) 9 {10 ll ans = n * k / __gcd(n * k, k * x + r);11 minn = min(minn, ans);12 maxn = max(maxn, ans);13 }14 }15 int main()16 {17 ll a, b;18 while (cin >> n >> k >> a >> b)19 {20 ll minn = INF, maxn = 0;21 solve((a + b) % k, minn, maxn);22 solve(((-a + b) % k + k) % k, minn, maxn);23 solve(((a - b) % k + k) % k, minn, maxn);24 solve(((-a - b) % k + k) % k, minn, maxn);25 cout << minn << " " << maxn << endl;26 }27 return 0;28 }

 

转载于:https://www.cnblogs.com/wangyiming/p/10870774.html

你可能感兴趣的文章
2、JDBC-CURD
查看>>
【C语言零碎知识点】变量的存储类型
查看>>
编程时 对 用途这个字段定义时 不要用using 这个英文
查看>>
Java中IO对象的输入输出流
查看>>
JQ实现accordion(可折叠)效果
查看>>
servlet的编码原理
查看>>
ARM4412的MMU内存管理单元
查看>>
HTML5可以存的东西有哪些:
查看>>
python相关遗漏知识点补充
查看>>
ReactJS实用技巧(2):从新人大坑——表单组件来看State
查看>>
无法删除数据库“XXX”,因为该数据库当前正在使用
查看>>
git flow 基本操作
查看>>
cf161d 求距离为k的点对(点分治,树形dp)
查看>>
80.Android之内存管理
查看>>
week4b:个人博客作业
查看>>
CSS伪类选择器 - nth-child(an+b):
查看>>
java学习内容总概括
查看>>
技能书 - 计算几何
查看>>
史上最全的免费编程电子书籍集合
查看>>
宝塔面板安装在根目录www下
查看>>