链接:B2. Cat Party (Hard Edition)
题意:
先给个n 然后给n个数组成的数组 要求输出一个k,满足前k个数去掉一个数之后剩下每种数的数量相同。 输出k的最大值。
分析:
读入的时候记录前n个数字每一个数字出现的次数->出现的次数出现的次数(听起来有点绕) 看代码更好理解
ps:别人的思路,这思路好厉害,记录一下
#include<iostream>
typedef long long ll
;
const int inf
=0x3f3f3f3f;
const int inn
=0x80808080;
using namespace std
;
const int maxm
=1e5+5;
int a
[maxm
];
int b
[maxm
];
int main(){
int n
;
cin
>>n
;
int ans
=1;
for(int i
=1;i
<=n
;i
++){
int t
;
cin
>>t
;
a
[t
]++;
b
[a
[t
]]++;
if(a
[t
]*b
[a
[t
]]==i
&&i
!=n
){
ans
=i
+1;
}
if(a
[t
]*b
[a
[t
]]==i
-1){
ans
=i
;
}
}
cout
<<ans
<<endl
;
return 0;
}