Codeforces Round #558 (Div. 2) B2. Cat Party (Hard Edition)

题意:给你n个数,求最大的x,使得让前x个中去掉一个,让其他数字都出现相同次数;

定义两个map<int,int>a,b;

a用来存输入的次数(设为x),b用来存出现当前数的次数的个数(设为y);

当x*y==i时说明i到i位置时前面所有的数都相等,当且仅当i!=n时 ans=i+1;(因为要去掉一个)

或者当x*y==i-1时,说明到i位置时前面多了一个,即符合要求  ans=i;

#include <bits/stdc++.h>
using namespace std;
map<int,int>a,b;
int main()
{
    int n;
    cin>>n;
    int x;
    int ans=1;
    for(int i=1;i<=n;i++){
        cin>>x;
        a[x]++;
        b[a[x]]++;
        if(a[x]*b[a[x]]==i&&i!=n){
            ans=i+1;
        }
        if(a[x]*b[a[x]]==i-1){
            ans=i;
        }
    }
    cout<<ans<<endl;
 
    return 0;
}
View Code

猜你喜欢

转载自www.cnblogs.com/lin1874/p/11260799.html