题意:
有一个有n个彩珠、m种彩珠的彩带,使每一种彩珠都包含的最小长度是多少?
思路:
离散+尺取法
代码:
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll inf=998244353;
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
map<int,int> ma;
struct w
{
int k, w;
} a[1000005];
int ji=0, mb[1000005];
bool cmp(struct w x,struct w y)
{
return x.w<y.w;
}
int main()
{
int n=read(), k=read();
for(int i=1; i<=k; i++)
{
int ki;
ki=read();
for(int j=1; j<=ki; j++)
{
a[ji].w=read();
a[ji++].k=i;
}
}
sort(a,a+ji,cmp);
int l=0, shu=0, ans=inf;
for(int i=0; i<ji; i++)
{
if(!mb[a[i].k])
{
shu++;
}
mb[a[i].k]++;
while(shu==k)
{
ans=min(a[i].w-a[l].w,ans);
if(mb[a[l].k]==1)
{
shu--;
}
mb[a[l].k]--;
l++;
}
}
cout << ans << endl;
return 0;
}

京公网安备 11010502036488号