zoukankan      html  css  js  c++  java
  • BZOJ3834 [Poi2014]Solar Panels

    我和数论没完了。。

    这题就是要找 a ∈ [mn1, mx1], b ∈ [mn2, mx2] 的最大 gcd(a, b)

    不妨设 mx1 < mx2,如果mn1 > mn2则答案就是mx1

    否则我们要找到一个最大的x使得 a ∈ [mn1 / x, mx1 / x], b ∈ [mn2 / x, mx2 / x], 满足gcd(a, b) ≥ 1

    分块搞搞,判断一下区间大小≥1就好了

     1 /**************************************************************
     2     Problem: 3834
     3     User: rausen
     4     Language: C++
     5     Result: Accepted
     6     Time:2152 ms
     7     Memory:804 kb
     8 ****************************************************************/
     9  
    10 #include <cstdio>
    11 #include <algorithm>
    12  
    13 using namespace std;
    14  
    15 int mx1, mn1, mx2, mn2, ans;
    16  
    17 int main() {
    18   int T, i, j;
    19   scanf("%d", &T);
    20   while (T--) {
    21     scanf("%d%d%d%d", &mn1, &mx1, &mn2, &mx2);
    22     if (mx1 > mx2)
    23       swap(mx1, mx2), swap(mn1, mn2);
    24     ans = 1;
    25     if (mn2 <= mx1 && mx1 <= mx2) ans = mx1; 
    26     else {
    27       --mn1, --mn2;
    28       for (i = mx1; i; i = j) {
    29     j = max(mx1 / (mx1 / i + 1), mx2 / (mx2 / i + 1));
    30     if (mn1 >= i) j = max(j, mn1 / (mn1 / i + 1));
    31     if (mn2 >= i) j = max(j, mn2 / (mn2 / i + 1));
    32     if (mx1 / i - mn1 / i > 0 && mx2 / i - mn2 / i > 0) {
    33       ans = i;
    34       break;
    35     }
    36       }
    37     }
    38     printf("%d
    ", ans);
    39   }
    40   return 0;
    41 }
    View Code
    By Xs酱~ 转载请说明 博客地址:http://www.cnblogs.com/rausen
  • 相关阅读:
    编译内核开始的小问题Unable to find the Ncurses libraries
    qq for linux Ubuntu 64位兼容
    ubuntu下安装lighttpd
    搭建boa服务器
    INI file and Iniparser
    kernel常用.gitignore配置
    光谱学习
    jump to case label fpermissive
    Qt通用方法及类库5
    Qt通用方法及类库1
  • 原文地址:https://www.cnblogs.com/rausen/p/4294442.html
Copyright © 2011-2022 走看看