Description
柳予欣饿了,想要吃东西。现在有n个食物,第i个食物的种类是ai(1<=ai<=1e9)。柳予欣吃东西喜欢同时吃两个不同种类的食物,
这样会增加她一点愉悦值,否则就不加。现在请问所有分配决策中能够获得的最大的愉悦值是多少?
Input
一个数字n(1 <= n <= 4.5e6)代表有几个食物,接下来一行n个数字,第i个数字ai代表每个食物的种类。
Output
输出一个数字,代表最大愉悦值。
Sample Input
3 1 2 3
Sample Output
1
Source
Unknown
题意:
柳予欣喜欢一起吃两个种类不同的食物,这样可以获得一点愉悦值,问柳予欣的最大愉悦值
思路:
求数据中出现次数最多的数 即众数 假设出现cnt次
若cnt>n/2 ans=(n/2)-cnt;
若cnt<=n/2 ans=n/2;
打擂台O(n)求众数 再O(n)查询
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=4.5e6+20;
int a[N];
int read()
{
int x=0;
char c=0;
c=getchar();
while(isdigit(c))
{
x=(x<<1)+(x<<3)+(c^48);
c=getchar();
}
return x;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
n=read();
int cnt=0;
int now;
for(int i=1; i<=n; ++i)
{
a[i]=read();
if(cnt==0)
{
++cnt;
now=a[i];
}
if(now!=a[i])
--cnt;
else
++cnt;
}
cnt=0;
for(int i=1; i<=n; ++i)
{
if(a[i]==now)
++cnt;
}
int ans;
if(cnt>(n/2))
ans=n-cnt;
else
ans=n/2;
cout<<ans<<'\n';
return 0;
}