Here is my code:
My logic is that if we sort the budgets and find the maximum value of i-th budget times (n-i). (0-based index). n-i means the number of people having budget greater than or equal to ith-budget.
#include<iostream>
#include<fstream>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<iomanip>
#include<queue>
#include<stack>
#include<cmath>
#include<utility>
using namespace std;
int main() {
int n;
cin >> n;
int a[n];
for(int i = 0;i < n;i++) cin >> a[i];
sort(a,a+n);
long long int ans = 0;
for(int i = 0;i < n;i++) {
ans = (ans> ((n-i)*a[i]) )?ans:(n-i)*a[i];
}
cout << ans;
return 0;
}
Here’s my idea on how to find the highest revenue, although I’m not sure if it is correct.
I think the best price would be the median of the array. For the odd length arrays, you can use the middle element and calculate the revenue generated. For even length arrays, you can calculate the revenues for both the elements in the middle and use the greater one.
The code doesn’t work because your multiplication in (n-i)*a[i] is a multiplication of 2 integers and will overflow int since, (n-i)*a[i] can be larger than 10^9.
You declare ans as an array of size n and store (n-i)*a[i] in ans[i]. Eventually sort the array (ans) and it’s last element is the answer. (I used this logic and had scored 100 upon 100 in the ZCO online practice server).