RT,对了前六个点,后四个WA
看着第一个题解的思路写的(虽然看不懂第一个的代码)
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,a[2000000],out[2000000],f,cnt=0,c=0,ans = 1e18+7;
map<int,int>m;
void cuter(int start,int last)
{
int smth = 1;
start = last-start;
for(int i=start;i < last;i++)
{
while(m[out[i]]>0)
{
m[out[i]]--;
for(int j = i+1;m[out[j]]<=m[out[j-1]]+1 && j <= last;j++)
{
m[out[j]]--;
smth=(j-i+1);
}
if(smth-1+i < last)
{
m[out[smth+i]]--;
smth++;
}
ans = min(smth,ans);
}
}
}
signed main()
{
cin >> n;
for(int i = 0;i < n;i++)
{
cin >> a[i];
m[a[i]]++;
}
sort(a,a+n);
out[cnt]=a[0];
for(int i = 1;i < n;i++)
{
if(out[cnt]!=a[i])
{
cnt++;
out[cnt]=a[i];
}
}
for(int i = 1;i <= cnt;i++)
{
if(out[i]-1==out[i-1] || c==0)
{
c++;
}
else
{
cuter(c,i-1);
c=1;
}
}
if(c!=0)
{
cuter(c,cnt);
}
if(ans == 1e18+7)
{
cout << 1;
return 0;
}
cout << ans;
return 0;
}