[SCOI2009]生日礼物

[SCOI2009]生日礼物

https://ac.nowcoder.com/acm/problem/20565

直接双指针模拟就好了,然后拿ans统计答案的min.注意变量之间别混淆.

//orz代码构思太弱了...
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+5;
typedef long long ll;
struct vv{
    ll col,pos;
}a[N];
int cnt[N];//统计

bool cmp(vv x,vv y)
{
    if(x.pos==y.pos) return x.col<y.col;
    else             return x.pos<y.pos;
}

int main()
{
    int n,k,vnt=0;
    scanf("%d%d",&n,&k);
    n=0;
    for(int i=1;i<=k;i++)
    {
        int x;scanf("%d",&x);
        for(int j=1;j<=x;j++)
        {
            ++n;
            scanf("%lld",&a[n].pos);
            a[n].col=i;
        }
    }
    sort(a+1,a+1+n,cmp);
   // for(int i=1;i<=n;i++) cout<<a[i].col<<' ';
    //cout<<endl;
    ll l=1;ll ans=1e15;
    for(ll r=1;r<=n;r++)//枚举右端点.
    {
        //int x=a[r].pos;
        //cout<<a[r].col<<endl;
        cnt[a[r].col]++;
        if(cnt[a[r].col]==1) vnt++;
        //cout<<vnt<<endl;
        if(vnt==k)
        {
            while(cnt[a[l].col]>1) {cnt[a[l].col]--; l++; }
            ans=min(ans,a[r].pos-a[l].pos);
        }
    }
    printf("%lld\n",ans);
    return 0;
}
lpt的小屋 文章被收录于专栏

我想要一份甜甜的爱情

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-24 13:40
点赞 评论 收藏
分享
07-09 20:50
门头沟学院 Java
码农索隆:1.教育背景和荣誉证书合二为一。 2.获奖项目理一遍,你做了什么,对你求职的岗位有什么帮助,没有就删掉。 3.技能特长和教育背景交换位置。 4.技能特长写的太差,上网上找简历参考。都不用问你别的,一个redis就能把你问住,写写你具体会redis哪些方面的知识。
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务