傻鸡抓大闸蟹

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lzyws739307453/article/details/85543292

题目链接:http://120.78.162.102/problem.php?id=6252
时间限制: 1 Sec  内存限制: 128 MB

背景

又到了吃大闸蟹的季节,黄老师想吃大闸蟹,于是叫傻鸡去抓大闸蟹~

题目描述

现有n只大闸蟹,每个在一个二维坐标上,保证没有任何两个大闸蟹重合。傻鸡伸手抓大闸蟹了,他怕大闸蟹的攻击,当他捉一只大闸蟹时,其他大闸蟹都朝这只运动(左边的向右,右边的向左,x坐标相同的不动)。
当然,大闸蟹只会在x方向上横行,每秒一单位长度。傻鸡捉一只大闸蟹一秒钟,当本秒末若某一只大闸蟹与傻鸡的手同x坐标,傻鸡的行动失败。问:怎样做才能抓完n只大闸蟹?

输入

第一行:n。n<=5000.
第二行有2*n正整数,相邻两个用一空格分开,第2*i-1和第2*i个数表示编号为i的大闸蟹的x,y坐标。
0<=所有坐标<=2^31-1
输入保证按先x后y的递增序排列。

输出

一共n行,每行一个大闸蟹编号,表示傻鸡取大闸蟹的先后序列。如有多解,输出第一个编号最小的,如果第一个编号相同,输出第二个编号最大的,再相同,输出第三个编号最小的...... 
输入数据保证有解

样例输入

2
1 3 4 2

样例输出

1
2

解题思路

本题读懂了就会发现很水,没读懂就会无从下手。
因为说了数据有解,所以不可能有俩个大闸蟹是相邻的。
因为刚开始没有俩只大闸蟹在一起,那么如果先抓最左边的这个,再抓最右边的这个,那么就相当于所有的大闸蟹没有动。
抓了俩次之后大闸蟹还是在原地,那么直接从俩头向中间输出就好了。
排序都不用....

#include <stdio.h>
int main()
{
    int n, t, l, r, a;
    while (~scanf("%d", &n))
    {
        for (int i = 0; i < 2 * n; i++)
            scanf("%*d", &a);
        l = 1;
        r = n;
        for (int t = 0; t < n; t++)
        {
            if (t & 1)
                printf("%d\n", r--);
            else printf("%d\n", l++);
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/lzyws739307453/article/details/85543292