Codeforces 1085C Connect Three(思维)
题目链接;
http://codeforces.com/problemset/problem/1085/C
题目大意:
给出A,B,C三点坐标,用最短的路径把他们连起来,输出路径上的点。
解题思路:
先把三点按x从小到大排序,然后以线段x=bx为中心轴,长度为三点最大的y-最小的y。
然后在把A,C点到中心轴垂直连起来,路径最短。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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; }