페이지

2170번: 선 긋기

https://www.acmicpc.net/problem/2170


#include<stdio.h>
#include<algorithm>
int ans, N, tmpy;
struct ABC
{
    int x, y;
}data[1000100];
bool comp(const ABC &i, const ABC &j)
{
    if (i.x == j.x)
    {
        return i.y<j.y;
    }
    else return i.x<j.x;
}
int main()
{
    int i, tmp;
    scanf("%d", &N);
    for (i = 1; i <= N; i++)
    {
        scanf("%d%d", &data[i].x, &data[i].y);
        if (data[i].x>data[i].y)
        {
            tmp = data[i].x;
            data[i].x = data[i].y;
            data[i].y = tmp;
        }
    }
    std::sort(data + 1, data + 1 + N, comp);
    ans += data[1].y - data[1].x;
    tmpy = data[1].y;
    for (i = 2; i <= N; i++)
    {
        if (tmpy <= data[i].x)
        {
            ans += data[i].y - data[i].x;
            tmpy = data[i].y;
        }
        else if (tmpy>data[i].x&&data[i].y>tmpy)
        {
            ans += data[i].y - data[i].x - (tmpy - data[i].x);
            tmpy = data[i].y;
        }
        else
        {
            ans += data[i].y - data[i].x - (data[i].y - data[i].x);
        }
    }
    printf("%d", ans);
    return 0;
}

댓글 없음 :

댓글 쓰기