您的位置:首页 > 大数据 > 人工智能

Codeforces Round #345 (Div. 2) B. Beautiful Paintings

2016-03-08 00:04 453 查看
B. Beautiful Paintings

time limit per test1 second

memory limit per test256 megabytes

inputstandard input

outputstandard output

There are 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.

We are allowed to arranged pictures in any order. What is the maximum possible number of times the visitor may become happy while passing all pictures from first to last? In other words, we are allowed to rearrange elements of a in any order. What is the maximum possible number of indices i (1 ≤ i ≤ n - 1), such that ai + 1 > ai.

Input

The first line of the input contains integer n (1 ≤ n ≤ 1000) — the number of painting.

The second line contains the sequence a1, a2, …, an (1 ≤ ai ≤ 1000), where ai means the beauty of the i-th painting.

Output

Print one integer — the maximum possible number of neighbouring pairs, such that ai + 1 > ai, after the optimal rearrangement.

Examples

input

5

20 30 10 50 40

output

4

input

4

200 100 100 200

output

2

Note

In the first sample, the optimal order is: 10, 20, 30, 40, 50.

In the second sample, the optimal order is: 100, 200, 100, 200.

本题的题意就不多做解释了,,讲讲我对本题的理解吧,本题就是一道简单的贪心题目。。但可能我的方法是你见过的最特殊的吧,,我的方法用到了基础的桶排序,,加上特判就完事了,,否则的话,,这道题你就等着wrong answer 吧。。。。其实有一个更牛逼的方法。。

#include<cstdio>
#include<cstring>

int a[1005];
int main()
{
int n;
while(~scanf("%d",&n))
{
memset(a,0,sizeof(a));//为了使用桶排序,所以要对每个数的个数进行清零
int num,flag=0;//flag用来记录找出的最大值
for(int i=0;i<n;i++)
{
scanf("%d",&num);
a[num]++;//每找到一个数它在数组中的个数就加一
if(num>flag)
{
flag=num;
}
}
int sum,sum1=0;
for(int i=0;i<=1000;i++)//关键的实现贪心的步骤
{
sum=0;
for(int j=0;j<=flag;j++)
{
if(a[j]>0)
{
a[j]--;
sum++;
}
}
if(sum!=0)//减掉的一个自己仔细想想,,就是n个数之间增加了n-1
sum1+=(sum-1);
else//进行特判,,表示已经不可能再增加了
{
break;
}

}
printf("%d\n",sum1);
}
return 0;
}


下面是一种比较牛掰的方法

#include<cstdio>
int a[1001],b,n,i,max;
int main(){
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&b);
a[b]++;
if(a[b]>max)max=a[b];
}
printf("%d",n-max);
return 0;
}


如果看完博客有所收获,,别忘了收藏我的博客地址哦。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: