zoukankan      html  css  js  c++  java
  • 浙江省赛压轴题 Floor Function

    给定a,b,c,d, 满足bc>ad, 求使得cndabn最小的最小的n.

    数据规模: 1a,b,c,d1018

    y=abx,x=bya, 原问题等价于求cxdy的最小值, axby,x1,y0.

    分两种情况考虑

    1. ab

    k=ab,ykx,c>ad/bkd

    a=akb,c=ckd,y=ykx, 此时原问题的约数条件任然满足, 问题可以缩小规模.

    原问题的解(x,y)对应现在的解(x,kx+y)

    显然若a=0, 我们可以得到(x,y)=(1,0)

    2. a<b

    k=b1a,x>ky

    b=bka,d=dkc,x=xky

    类似的, 原问题的约数条件任然满足, 问题可以缩小规模.

    显然若d0, 我们可以得到(x,y)=(1,0)

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    
    void solve(LL a, LL b, LL c, LL d, LL &x, LL &y) {
      if (a == 0 || d <= 0) {x = 1, y = 0; return;}
      if (a >= b) {
        LL k = a / b;
        solve(a - k * b, b, c - k * d, d, x, y);
        y += k * x;
      }
      else {
        LL k = (b - 1) / a;
        if (d / c < k) x = 1, y = 0;
        else solve(a, b - k * a, c, d - k * c, x, y);
        x += k * y;
      }
    }
    
    int main() {
      int T; scanf("%d", &T);
      for (int _ = 0; _ < T; ++ _) {
        LL a, b, c, d; scanf("%lld%lld%lld%lld", &a, &b, &c, &d);
        LL x, y; solve(a, b, c, d, x, y);
        printf("%lld
    ", x);
      }
      return 0;
    }
    View Code
  • 相关阅读:
    UITableView
    xib的读取方式
    远程登录树莓派
    来体验下Linux吧
    树莓派了解Linux基本命令
    来感受Linux命令行的“真香定律”
    初尝树莓派
    从入手树莓派开始
    08-java学习笔记-集合框架中的工具类
    07-java学习笔记-map集合
  • 原文地址:https://www.cnblogs.com/BugClearlove/p/4481595.html
Copyright © 2011-2022 走看看