top1编程
← 返回题目
题解

排队接水

2 条题解

  • 0
    @ 2026-7-29 2:09:25
    #include<bits/stdc++.h>
    using namespace std;
    int n;
    int a[200000];
    int main(){
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		cin>>a[i];
    	}
    	sort(a+1,a+n+1);//满意度高的先接水
    	long long s=0,c=0;
    	//只要是正收益就可以一直接人上去
       // 求每个人打水情况及其前缀和
    	for(int i=n;i>=1;i--){
    		s+=a[i];//构造前缀和
    		if(s<=0){//出现负收益
    			break;
    		}
    		c+=s;//计入总收益
    	}
    	cout<<c;
    }
    
    • 0
      @ 2026-7-29 1:49:06
      #include<bits/stdc++.h>
      using namespace std;
      int n;
      int a[200000];
      int main(){
      	cin>>n;
      	for(int i=1;i<=n;i++){
      		cin>>a[i];
      	}
      	sort(a+1,a+n+1);//满意度高的先接水
      	long long s=0,c=0;
      	//只要是正收益就可以一直接人上去
         // 求每个人打水情况及其前缀和
      	for(int i=n;i>=1;i--){
      		s+=a[i];//构造前缀和
      		if(s<=0){//出现负收益
      			break;
      		}
      		c+=s;//计入总收益
      	}
      	cout<<c;
      }
      
      • 1