← Back to List

15975번: 화살표 그리기 ↗

Solutions

C++14
1008 B | 1008 chars
#include <iostream>
#include <algorithm>
using namespace std;
struct st{
    long long X,Color;
};
long long N,S;
st ar[110000];

bool compare(st a, st b)
{
    if(a.Color<b.Color) return true;
    else if(a.Color==b.Color)
    {
        if(a.X<b.X)
        {
            return true;
        }
    }
    return false;
}
int main()
{
    cin>>N;
    for(int x=0; x<N; x++) cin>>ar[x].X>>ar[x].Color;
    sort(ar,ar+N,compare);
    for(int x=0; x<N; x++)
    {
        if(x==0)
        {
            if(ar[x+1].Color==ar[x].Color)
            {
                S+=ar[x+1].X-ar[x].X;
            }
        }
        else
        {
            long long M=999999999999;
            if(ar[x+1].Color==ar[x].Color)
            {
                if(ar[x+1].X-ar[x].X<M) M=ar[x+1].X-ar[x].X;
            }
            if(ar[x-1].Color==ar[x].Color)
            {
                if(ar[x].X-ar[x-1].X<M) M=ar[x].X-ar[x-1].X;
            }
            if(M!=999999999999) S+=M;
        }
        
    }
    cout<<S;
}