Problem D. Ice Cream Tower 題解(二分+貪心)
阿新 • • 發佈:2021-07-16
題目連結
題目思路
二分答案
然後貪心check
這個貪心有點意思
程式碼
卷也卷不過,躺又躺不平#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int,int> pii; #define fi first #define se second #define debug printf("aaaaaaaaaaa\n"); const int maxn=3e5+5,inf=0x3f3f3f3f,mod=1e9+7; const ll INF=0x3f3f3f3f3f3f3f3f; int n,k; int tot=0; ll a[maxn]; ll num[maxn]; bool check(int x){ int pos=1; int lun=0; for(int i=1;i<=x;i++){ num[i]=0; } for(int i=1;i<=n;i++){ if(a[i]>=2*num[pos]){ num[pos]=a[i]; pos++; if(pos==x+1){ lun++; pos=1; } } } return lun>=k; } int main(){ std::ios::sync_with_stdio(false); cin.tie(0); int _; cin>>_; while(_--){ cin>>n>>k; for(int i=1;i<=n;i++){ cin>>a[i]; } sort(a+1,a+1+n); int l=1,r=n/k,ans=0; while(l<=r){ int mid=(l+r)/2; if(check(mid)){ ans=mid; l=mid+1; }else{ r=mid-1; } } cout<<"Case #"<<++tot<<": "<<ans<<'\n'; } return 0; }