题意:给你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; }