CodeForces 651B Beautiful Paintings
原创
©著作权归作者所有:来自51CTO博客作者wx634e39bb59725的原创作品,请联系作者获取转载授权,否则将追究法律责任
B. Beautiful Paintings
time limit per test
memory limit per test
input
output
n pictures delivered for the new exhibition. The i-th
painting has beauty ai.
We know that a visitor becomes happy every time he passes from a painting to a more beautiful one.
a in
any order. What is the maximum possible number of indices i (1 ≤ i ≤ n - 1),
such that ai + 1 > ai.
Input
n (1 ≤ n ≤ 1000) —
the number of painting.
a1, a2, ..., an (1 ≤ ai),
where ai means
the beauty of the i-th painting.
Output
ai + 1 > ai,
after the optimal rearrangement.
Examples
input
output
input
output
2
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
#include <stdio.h>
using namespace std;
int a[1005];
int b[1005];
int tag[1005];
int tag2[1005];
int num[1005];
int n;
int main()
{
scanf("%d",&n);
memset(tag2,0,sizeof(tag2));
int cnt=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(!tag2[a[i]])
{
tag2[a[i]]=1;
b[++cnt]=a[i];
}
}
sort(b+1,b+cnt+1);
for(int i=1;i<=cnt;i++)
tag[b[i]]=i;
memset(num,0,sizeof(num));
for(int i=1;i<=n;i++)
num[tag[a[i]]]++;
int ans=0;
for(int i=1;i<=cnt;i++)
{
for(int j=i-1;j>=1;j--)
{
if(num[j]<=num[i])
{
ans+=num[j];
num[j]=0;
num[i]-=num[j];
}
else
{
ans+=num[i];
num[i]=0;
num[j]-=num[i];
}
}
}
printf("%d\n",ans);
return 0;
}