Codeforces 1085C Connect Three(思维)

题目链接;

http://codeforces.com/problemset/problem/1085/C

题目大意:

给出A,B,C三点坐标,用最短的路径把他们连起来,输出路径上的点。

解题思路:

先把三点按x从小到大排序,然后以线段x=bx为中心轴,长度为三点最大的y-最小的y

然后在把A,C点到中心轴垂直连起来,路径最短。

 

#include<bits/stdc++.h>
using namespace std;
vector<pair<int,int> >ans;
int main()
{
    int ax,ay,bx,by,cx,cy;
    cin>>ax>>ay>>bx>>by>>cx>>cy;
    ///以x的大小从小到大排序
    if(ax>bx) swap(ax,bx),swap(ay,by);
    if(bx>cx) swap(bx,cx),swap(by,cy);
    if(ax>bx) swap(ax,bx),swap(ay,by);

    ///以bx为中心轴
    for(int i = min({ay,by,cy}); i <= max({ay,by,cy}); i++)///找到中心轴的长度
        ans.push_back({bx,i});
    for(int i=ax;i<bx;i++)///a点到中心轴
        ans.push_back({i,ay});
    for(int i=bx+1;i<=cx;i++)///c点到中心轴
        ans.push_back({i,cy});

    cout<<ans.size()<<endl;
    for(auto i:ans)
        printf("%d %d\n",i.first,i.second);

    return 0;
}
View Code

 

posted @ 2018-12-24 21:47  三亿鼠标De梦想  阅读(195)  评论(0编辑  收藏  举报