传送门
这场比赛原地爆炸了啊!!!
只做了两道。
A题
传送门 手贱没关 f r e o p e n freopen freopen于是 w a wa wa了一次,死活调不出错。
题意:给出网格图上三个点坐标,让你求出让三个点连通的最少网格数并且输出任意一种连接的方案。
思路:可以直接上分类讨论。
不过可以人脑减去一些讨论。
我们设最初的坐标为 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) (x_1,y_1),(x_2,y_2),(x_3,y_3) (x1,y1),(x2,y2),(x3,y3)
然后把 x , y x,y x,y分别排序变成 x 1 ′ , x 2 ′ , x 3 ′ x_1',x_2',x_3' x1′,x2′,x3′和 y 1 ′ , y 2 ′ , y 3 ′ y_1',y_2',y_3' y1′,y2′,y3′
显然横向走的长度是 x 3 − x 1 + 1 x_3-x_1+1 x3−x1+1,我们不妨直接把 ( x 1 ′ , y 2 ′ ) − > ( x 3 ′ , y 2 ′ ) (x_1',y_2')->(x_3',y_2') (x1′,y2′)−>(x3′,y2′)全部染上。
然后就只用考虑纵向的了。
于是我们找到 y y y最小的点 p ( p x , p y ) p(p_x,p_y) p(px,py),把 ( p x , p y ) − > ( p x , y 1 − 1 ) (p_x,p_y)->(p_x,y_1-1) (px,py)−>(px,y1−1)染上,然后类似地去找到 y y y最大的点 q ( q x , q y ) q(q_x,q_y) q(qx,qy),把 ( q x , q y ) − > ( q x , y 1 − 1 ) (q_x,q_y)->(q_x,y_1-1) (qx,qy)−>(qx,y1−1)染上就可以满足题意了。
代码:
#include<bits/stdc++.h>
#define ri register int
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getch