警钟长鸣
查看原帖
警钟长鸣
1120828
linjinkun楼主2024/1/5 21:55

76分代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 5e4+5;
struct node
{
    int x;
    int y;
};
int n;
node a[N];
map<int,int>t;
map<int,int>t2;
bool cmp(node x,node y)
{
    return x.x<y.x;
}
int main()
{
    int sum = 0;
    scanf("%d",&n);
    for(int i = 1;i<=n;i++)
    {
        scanf("%d %d",&a[i].x,&a[i].y);
        if(t2[a[i].y] == 0)
        {
            t2[a[i].y] = 1;
            sum++;
        }
    }
    int ans = 0x3ffffff;
    sort(a+1,a+n+1,cmp);
    int ti = 1;
    t[a[1].y] = 1;
    int z = 1;
    for(int i = 1;i<=n;i++)
    {
        while(z<sum&&ti<n)
        {
            ti++;
            t[a[ti].y]++;
            if(t[a[ti].y] == 1)
            {
                z++;
            }
        }
        if(z == sum)
        {
            ans = min(ans,a[ti].x-a[i].x);
        }
        t[a[i].y]--;
        if(t[a[i].y] == 0)
        {
            z--;
        }
    }
    printf("%d",ans);
    return 0;
}

100分代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 5e4+5;
struct node
{
    int x;
    int y;
};
int n;
node a[N];
map<int,int>t;
map<int,int>t2;
bool cmp(node x,node y)
{
    return x.x<y.x;
}
int main()
{
    int sum = 0;
    scanf("%d",&n);
    for(int i = 1;i<=n;i++)
    {
        scanf("%d %d",&a[i].x,&a[i].y);
        if(t2[a[i].y] == 0)
        {
            t2[a[i].y] = 1;
            sum++;
        }
    }
    int ans = 2e9;
    sort(a+1,a+n+1,cmp);
    int ti = 1;
    t[a[1].y] = 1;
    int z = 1;
    for(int i = 1;i<=n;i++)
    {
        while(z<sum&&ti<n)
        {
            ti++;
            t[a[ti].y]++;
            if(t[a[ti].y] == 1)
            {
                z++;
            }
        }
        if(z == sum)
        {
            ans = min(ans,a[ti].x-a[i].x);
        }
        t[a[i].y]--;
        if(t[a[i].y] == 0)
        {
            z--;
        }
    }
    printf("%d",ans);
    return 0;
}

ans要设定得非常大才行!!@_@

2024/1/5 21:55
加载中...