zoukankan      html  css  js  c++  java
  • hdoj薛猫猫杯程序设计网络赛1003 球球大作战

    思路:

    二分,check函数不是很好写。

    实现:

    1.

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const ll INF = 0x3f3f3f3f3f3f3f3f;
     5 ll a[100005];
     6 int n, k;
     7 bool check(ll x)
     8 {
     9     int cnt = 0;
    10     ll sum = 0;
    11     for (int i = 1; i <= n; i++)
    12     {
    13         if (a[i] >= x) continue;
    14         sum = a[i++];
    15         while (i <= n && sum < x)
    16         {
    17             sum += a[i++]; cnt++;
    18         }
    19         if (i > n && sum < x) cnt++;
    20         i--;
    21     }
    22     return cnt <= k;
    23 }
    24 int main()
    25 {
    26     int T;
    27     cin >> T;
    28     while (T--)
    29     {
    30         ll l = INF, r;
    31         cin >> n >> k;
    32         for (int i = 1; i <= n; i++) 
    33         {
    34             cin >> a[i];
    35             l = min(l, a[i]);
    36             r += a[i];
    37         }
    38         ll ans = l;
    39         while (l <= r)
    40         {
    41             ll m = l + r >> 1;
    42             if (check(m))
    43             {
    44                 ans = m;
    45                 l = m + 1;
    46             }
    47             else r = m - 1;
    48         }
    49         cout << ans << endl;
    50     }
    51     return 0;
    52 }

    2.

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 const ll INF = 0x3f3f3f3f3f3f3f3f;
     5 ll a[100005], b[100005];
     6 int n, k;
     7 bool check(ll x)
     8 {
     9     for (int i = 1; i <= n; i++) b[i] = a[i];
    10     int cnt = 0;
    11     for (int i = 1; i <= n; i++)
    12     {
    13         if (b[i] >= x) continue;
    14         b[i + 1] += b[i];
    15         cnt++;
    16     }
    17     return cnt <= k;
    18 }
    19 int main()
    20 {
    21     int T;
    22     cin >> T;
    23     while (T--)
    24     {
    25         ll l = INF, r;
    26         cin >> n >> k;
    27         for (int i = 1; i <= n; i++) 
    28         {
    29             cin >> a[i];
    30             l = min(l, a[i]);
    31             r += a[i];
    32         }
    33         ll ans = l;
    34         while (l <= r)
    35         {
    36             ll m = l + r >> 1;
    37             if (check(m))
    38             {
    39                 ans = m;
    40                 l = m + 1;
    41             }
    42             else r = m - 1;
    43         }
    44         cout << ans << endl;
    45     }
    46     return 0;
    47 }
  • 相关阅读:
    程序员那些事
    Android studio导入eclipse工程时出现中文全部乱码问题
    环境搭建贴
    Android涉及到的网址都记录在这把~~~~
    好书记录
    网络资源整理
    C# 资源
    samba 服务器
    我的虚拟机上网记录
    共享资源链接
  • 原文地址:https://www.cnblogs.com/wangyiming/p/9973811.html
Copyright © 2011-2022 走看看