题目:https://codeforces.com/contest/1163/problem/B1
题意:有最多10种颜色,要求一个最大的x,使得在前x个颜色中移除某个颜色,所有出现过的颜色出现次数相等。
题解:数组标记法。
用a数组标记条纹出现的次数,b数组标记出现次数的次数,当 出现次数 * 出现次数的次数 = 循环时的i时 ,所求的最大x便是下一个i ; 当 出现次数 * 出现次数的次数 = 上一个循环的i , 所求的最大x便此时的i。
#include<iostream> //O
#include<cstring>
#include<string>
#include<algorithm>
const int manx=1e5+5;
using namespace std;
long long a[manx],b[manx];
int main()
{
int n,x;
std::ios::sync_with_stdio(false);
cin>>n;
long long 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;
}