#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,a[200005],r=1e17+1,l=0,k;
signed main(){
    cin>>n>>k;
    for(int i = 1;i<=n;i++){
        scanf("%lld",&a[i]);
    }
    while(l+1<r){
        int mid=(l+r)/2;
        int s=0;
        for(int i = 1;i<=n;i++){
            s=s+mid/a[i];
        }
        if(s>=k) r=mid;
        else l=mid;
    }
    cout<<r;
    return 0;
}

2 条评论

  • @ 2026-5-21 14:52:39

    #include <bits/stdc++.h> #define int long long using namespace std; int a[200005]; int n,t; int check(int x){ int sum=0; for(int i=1;i<=n;i++){ sum=sum+(x/a[i]); if(sum>=t)return true; } if(sum>=t)return true; else return false; } signed main (){ cin>>n>>t; for(int i=1;i<=n;i++){ cin>>a[i]; } int l=0; int r=1e17+1; while(l+1<r){ int mid=(l+r)/2; if(check(mid)){ r=mid; }else{ l=mid; } } cout<<r; return 0; 95分???

    • @ 2026-5-21 0:42:07
      #include<bits/stdc++.h>
      #define int long long
      using namespace std;
      int n, a[200005], r = 1e18 + 10, l = 0, k;
      signed main(){
          scanf("%lld%lld", &n, &k);
          for(int i = 1; i <= n; i++){
              scanf("%lld", &a[i]);
          }
          while(l + 1 < r){
              int mid = (l + r) / 2;
              int s = 0;
              for(int i = 1; i <= n; i++){
                  s += mid / a[i];
                  if(s >= k) break;   // 提前退出,防止溢出
              }
              if(s >= k) r = mid;
              else l = mid;
          }
          cout << r;
          return 0;
      }
      
      • 1

      信息

      ID
      192
      时间
      ms
      内存
      MiB
      难度
      3
      标签
      递交数
      42
      已通过
      10
      上传者