paste bin

malic
C++
#include <cstdio>
#include <vector>
#include <algorithm>
using std::abs;
struct plugs
{
    int x,y;
    int distToNext;
    int distToOrigin;
    bool operator<(const plugs &b) const
    {
        return distToOrigin<b.distToOrigin;
    }
};

int main(void)
{
    std::vector<plugs> s;
    int i,x,y,N,M,K;
    plugs *p;
    p=(plugs*)malloc(sizeof(plugs));
    scanf("%d%d%d",&N,&M,&K);

    for(i=0;i<M;i++)
    {
        scanf("%d%d",&x,&y);
        p->x=x;
        p->y=y;
        p->distToNext=0;
        if (y==0 && 0<=x && x<N)
            p->distToOrigin=x;
        else if ( x==N && 0<y && y<=N)
            p->distToOrigin=N+y;
        else if ( y==N && 0<x && x<=N)
            p->distToOrigin=3*N-x;
        else
            p->distToOrigin=4*N-y;
        s.push_back(*p);
    }

    std::sort(s.begin(),s.end());
    p->distToOrigin=s[0].distToOrigin+4*N;
    s.push_back(*p);

    for(i=0;i<M;i++)
        s[i].distToNext=s[i+1].distToOrigin-s[i].distToOrigin;
    
    int tmpSum=0,minVal=0x7FFFFFFF;
    K--;
    for(i=0;i<K;i++)
    {
        tmpSum+=s[i].distToNext;
    }
    for(i=0;i<M;i++)
    {
        tmpSum=tmpSum+s[(i+K)%M].distToNext-s[i].distToNext;
        if(tmpSum<minVal)
            minVal=tmpSum;
    }
    printf("%d\n",minVal);
    delete p;
    return 0;
    
}

2019 C2QD

fork this code