zoukankan      html  css  js  c++  java
  • CF1142A The Beatles

    思路:

    令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 <bits/stdc++.h>
     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 }
  • 相关阅读:
    poi 导出excel表格
    js 表单非空校验
    表格添加 点击添加增加一列
    date日期比较
    oralce 匿名块 练习
    SQL 入门
    Map集合&&异常处理&&file类
    Properties集合&&工具类FileUtils
    Java中Date类&&Calendar类
    jquery的基础
  • 原文地址:https://www.cnblogs.com/wangyiming/p/10870774.html
Copyright © 2011-2022 走看看