zoukankan      html  css  js  c++  java
  • poj3685 Matrix

    思路:

    二分套二分。

    矩阵在每一列上是严格递增的,可以利用这一点进行二分。

    实现:

     1 #include <cstdio>
     2 #include <cmath>
     3 #include <algorithm>
     4 using namespace std;
     5 typedef long long ll;
     6 const ll INF = 0x3f3f3f3f3f3f3f3f;
     7 ll n, m;
     8 ll cal(ll i, ll j)
     9 {
    10     return i * i + i * 100000 + j * j - j * 100000 + i * j;
    11 }
    12 bool check(ll x)
    13 {
    14     ll sum = 0;
    15     for (int i = 1; i <= n; i++)
    16     {
    17         int l = 1, r = n, ans = 0;
    18         while (l <= r)
    19         {
    20             int m = l + r >> 1;
    21             ll tmp = cal(m, i);
    22             if (tmp <= x) { ans = m; l = m + 1; }
    23             else r = m - 1;
    24         }
    25         sum += ans;
    26     }
    27     return sum >= m;
    28 }
    29 int main()
    30 {
    31     int T;
    32     scanf("%d", &T);
    33     while (T--)
    34     {
    35         scanf("%lld %lld", &n, &m);
    36         ll l = INF, r = -INF, ans = -INF;
    37         for (int i = 1; i <= n; i++)
    38         {
    39             l = min(l, cal(1, i));
    40             r = max(r, cal(n, i));
    41         }
    42         while (l <= r)
    43         {
    44             ll m = l + r >> 1;
    45             if (check(m)) { ans = m; r = m - 1; }
    46             else l = m + 1;
    47         }
    48         printf("%lld
    ", ans);
    49     }
    50     return 0;
    51 }
  • 相关阅读:
    JEECG开发总结
    ehcache集群的配置
    spring拦截器
    spring的基本配置
    kindeditor编辑器
    jQuery中的Ajax
    表单验证
    Python中的Random模块
    Open vSwitch FAQ (二)
    Open vSwitch FAQ (一)
  • 原文地址:https://www.cnblogs.com/wangyiming/p/8392958.html
Copyright © 2011-2022 走看看