1716: 棒棒糖
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 190 Solved: 80
[Submit][Status][Web Board]
Description
有一天,zhizhang骚年去买棒棒糖,他买了n个棒棒糖,每个棒棒糖都有ai的甜度。现在骚年开始吃每根棒棒糖,如果骚年先吃棒棒糖的甜度小于接下来吃的棒棒糖的甜度,那么他就会汪汪叫一声。所以,你就想调戏他,你就想找出一个顺序使他叫的次数最多。
Input
多组测试数据
第一行输入一个n(1<=n<=1000)
输入n个数ai(1<=ai<=1000)
Output
输出最大叫的次数。
Sample Input
5
20 30 10 50 40
4
200 100 100 200
Sample Output
4
2
解析:记录每个数出现的次数。从最大的开始,往下找比它小的数,存在这找的的这数次数减一,则说明可以叫一次,直到每个数都减到0,说明都不能叫了
#include<bits/stdc++.h>
using namespace std;
#define e exp(1)
#define pi acos(-1)
#define mod 1000000007
#define inf 0x3f3f3f3f
#define ll long long
#define ull unsigned long long
#define mem(a,b) memset(a,b,sizeof(a))
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int n,x,a[1005];
int main()
{
while(~scanf("%d",&n))
{
mem(a,0);
for(int i=0; i<n; i++)
{
scanf("%d",&x);
a[x]++;
}
int ans=0;
for(int i=1000; i>0;)
{
while(!a[i])i--;
a[i]--;
for(int j=i-1; j>0; j--)
{
if(a[j])
{
ans++;
a[j]--;
}
}
}
printf("%d\n",ans);
}
return 0;
}