一、题面
二、分析
这题的关键是要确定一个点是从三个点出发的交汇点,其他的只要结合曼哈顿距离的定义即可明白。因为是三个点,这个交汇点的坐标分别对应的就是x,y值的中值。然后一个小技巧就是曼哈顿距离的输出,两种情况对应两种while循环,等于的情况刚好退出循环。
三、AC代码
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 int X[4], Y[4]; 6 set<pair<int, int> > Ans; 7 8 void Print(int x, int y, int xt, int yt) 9 { 10 while(x < xt) 11 { 12 x++; 13 Ans.insert(make_pair(x, y)); 14 } 15 while(x > xt) 16 { 17 x--; 18 Ans.insert(make_pair(x, y)); 19 } 20 while(y > yt) 21 { 22 y--; 23 Ans.insert(make_pair(xt, y)); 24 } 25 while(y < yt) 26 { 27 y++; 28 Ans.insert(make_pair(xt, y)); 29 } 30 } 31 32 int main() 33 { 34 //freopen("input.txt", "r", stdin); 35 while(scanf("%d %d", &X[0], &Y[0])!=EOF) 36 { 37 int ans; 38 int dx[4], dy[4]; 39 for(int i = 1; i < 3; i++) 40 { 41 scanf("%d %d", &X[i], &Y[i]); 42 } 43 memcpy(dx, X, sizeof(X)); 44 memcpy(dy, Y, sizeof(Y)); 45 sort(dx, dx+3); 46 sort(dy, dy+3); 47 for(int i = 0; i < 3; i++) 48 { 49 Ans.insert(make_pair(X[i], Y[i])); 50 Print(X[i], Y[i], dx[1], dy[1]); 51 } 52 printf("%d\n", Ans.size()); 53 for(auto itr = Ans.begin(); itr != Ans.end(); itr++) 54 { 55 printf("%d %d\n", itr->first, itr->second); 56 } 57 } 58 return 0; 59 }