CodeForces - 1085C Connect Three(思维)

本文提供了一个解决 CodeForces-1085C 题目的算法实现,该题要求构建一条连接三个点的最小路径。通过寻找中间点并构建垂直和水平路径,算法确保了路径长度最短。

题目链接:https://cn.vjudge.net/problem/CodeForces-1085C

题目大意:给了你三个点,让你建一条路把三个点都连起来,路径尽可能小。

解题思路:构造题,找到中间位置的点,以他做垂线,两边的点水平连接。

#include <bits/stdc++.h>
using namespace std;
set <pair<int, int> >st;
struct node
{
    int x, y;
}a[105];
bool cmp(struct node a, struct node b)
{
    return a.x > b.x;
}
int main()
{
    int i, j, k, n, m;
    for(i = 0; i < 3; i++)cin >> a[i].x >> a[i].y;
    sort(a, a + 3, cmp);
    int l1, l2, r1, r2;
    l1 = max(max(a[0].y, a[1].y), a[2].y);
    l2 = min(min(a[0].y, a[1].y), a[2].y);
    r1 = max(max(a[0].x, a[1].x), a[2].x);
    r2 = min(min(a[0].x, a[1].x), a[2].x);
    //for(i = 0; i < 3; i++)cout << a[i].x << " " << a[i].y << endl;
    for(i = l2; i <= l1; i++)
    {
        //if(i == a[1].y)continue;
        //cout << a[1].x << " " << i << endl;
        st.insert(make_pair(a[1].x, i));
    }
    //cout << l1 << " " << l2 << " " << r1 << " " << r2 << endl;
    for(i = r2; i <= a[1].x; i++)
    {
        //if(i == a[0].x)continue;
        st.insert(make_pair(i, a[2].y));
    }
    for(i = a[1].x; i <= r1; i++)
    {
        //if(i == a[2].x)continue;
        st.insert(make_pair(i, a[0].y));
    }
    cout << st.size() << endl;
    set<pair<int, int> >::iterator it;
    for(it = st.begin(); it != st.end(); it++)
    {
        cout << it -> first << " " << it -> second << endl;
    }
    return 0;
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值