1. 程式人生 > >Codeforces 1085C Connect Three(思維)

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