Mai intai trebuie sa te autentifici.
Cod sursa(job #585781)
| Utilizator | Data | 30 aprilie 2011 11:50:10 | |
|---|---|---|---|
| Problema | Avioane | Scor | 10 |
| Compilator | cpp | Status | done |
| Runda | Algoritmiada 2011, Runda Finală, Clasele 5-9 | Marime | 1.12 kb |
#include <stdio.h>
#include <algorithm>
using namespace std;
int n,maxx,s,i,ind,v[100010],v2[100010],left,right,sol;
int main()
{
freopen("avioane.in","r",stdin);
freopen("avioane.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i)
{
scanf("%d",&v[i]);
}
sort(v+1,v+n+1);
for (i=1;i<=n;++i)
v2[i]=v[i];
for (i=1;i<=n;++i)
if (v[i]*(n-i+1)>maxx)
{
maxx=v[i]*(n-i+1);
ind=i;
}
left=ind-25;right=ind+25;
if (left<1) left=1;
if (right>n) right=n;
for (ind=left;ind<=right;++ind)
{
s=0;
for (i=1;i<=n;++i)
v[i]=v2[i];
maxx=v[ind]*(n-ind+1);
s+=maxx;
maxx/=(n-ind+1);
for (i=ind;i<=n;++i)
v[i]-=maxx;
maxx=0;
for (i=ind;i<=n;++i)
if (v[i]*(n-i+1)>maxx)
maxx=v[i]*(n-i+1);
for (i=1;i<ind;++i)
if (v[i]*(ind-i)>maxx)
maxx=v[i]*(ind-i);
s+=maxx;
if (s>sol) sol=s;
}
printf("%d",sol);
return 0;
}
