hdu6300 (不相交三角形)

http://acm.hdu.edu.cn/showproblem.php?pid=6300

题意给出T个测试案例,接下来输入整数n,然后输入3*n个顶点,题目保证三点不共线,要求输出构成不相交三角形的所代表的对应的顶点。

刚开始连题目都没看懂,其实这个题目只要把顶点的横坐标排序,每三个点输出,这样构成的三角形当然不会相交,被自己蠢哭。

后来提交的时候其实我还连带着把纵坐标也排序,其实根本没必要,因为题目已经保证三点不共线了,那么即使横纵坐标都相等那也只有两个点而已,再加上另外一个点也能构成三角形。

贴出代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;

struct Node
{
    int x, y;
    int b;
}dot[3001];

bool cmp(Node a, Node b)
{
    return a.x < b.x;
}

int main()
{
    int T;
    int n;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d", &n);
        int count = 0;

        //有一个小细节要注意,这里输入要以0开始,因为后面的sort排序是以0坐标开始的
        for (int i = 0; i < 3*n; i++)
        {
            scanf("%d%d", &dot[i].x, &dot[i].y);
            dot[i].b = i+1;
        }
        sort(dot, dot+3*n, cmp);

        for(int i = 0; i < 3*n; i++)
        {
            if (count < 2)
            {
                printf("%d ", dot[i].b);
                count++;
            }
            else {
                printf("%d\n", dot[i].b);
                count = 0;
            }
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_39548163/article/details/81192263