2 条题解

  • 1
    @ 2024-1-7 20:32:27

    世界上最好的题解😄

    #include<bits/stdc++.h>
    using namespace std;
    const int N=500010;
    int n,a,b,w[N];
    bool check(int x){
    	int s=0;
    	for(int i=1;i<=n;i++){
    		if(w[i]-a*x<+0)continue;
    		int p=ceil((w[i]-a*x)*1.0/b);
    		s+=p;
    	}
    	return s<=x;
    }
    int bsearch(int l,int r){
    	while(l<r){
    		int mid=(l+r)>>1;
    		if(check(mid))r=mid;
    		else l=mid+1;
    	}
    	return l;
    }
    int main(){
    	cin>>n>>a>>b;
    	int l=0,r=0;
    	for(int i=1;i<=n;i++){
    		cin>>w[i];
    		r=max(r,w[i]/a+1);
    	}
    	int ans=bsearch(l,r);
    	cout<<ans;
    	return 0;
    }
    

    看过的麻烦点个赞呗🚀️

    • 0
      @ 2023-11-10 8:51:58
      #include<bits/stdc++.h>
      using namespace std;
      int n,a,b;
      int w[500005];
      int cnt=0;
      priority_queue<int> q;
      int main(){
      	cin>>n>>a>>b;
      	for(int i=1;i<=n;i++){
      		cin>>w[i];
      		q.push(w[i]);
      	}
      	while(1){
      		cnt++;
      		int k=q.top();
      		k-=b;
      		q.pop();
      		q.push(k);
      		if(q.top()-(cnt*a)<=0){
      			cout<<cnt<<endl;
      			return 0;
      		}
      	}
      	return 0;
      } 
      
      • 1

      信息

      ID
      808
      时间
      1000ms
      内存
      125MiB
      难度
      3
      标签
      递交数
      5
      已通过
      3
      上传者