【比赛经历】
- 看完T1先写了一个\(O(NM)\)的暴力,交一发,得分5/10,说明正确地理解了题意。
- 感觉T1码量挺大的,于是先放了一下。
- T2是傻题,看完10min写掉了,得分10/10。
- 回过头来把T1的线段树码了,一遍写对,不用痛苦地调这个鬼题,提交,得分10/10,跑了1.8s,果然STL不能乱用,差点T了。
- 时间一共过了1.5h-。
- 再看T3,先写了个暴力,找了找规律
(还试了试OEIS),然后发现并证明了规律,过掉了。- 时间一共过了2h+。
【T1】Slingshot
【题目链接】
【题解链接】
【思路要点】
- 对于每个询问,我们本质上是要求\(Min_{i=1}^{N}\{t_i+|x_i-a|+|y_i-b|\}\)。
- 把\((a,b)\),\((x,y)\)看做平面上的点,对于每个询问\((a,b)\),我们需要找到其右上、右下、左上、左下四个矩形内某一个关于\(x\),\(y\),\(t\)的式子的最小值。
- 把询问按横坐标排序,对纵坐标建立线段树,然后就做完了。
- 总时间复杂度\(O((N+M)log(N+M))\)。
【代码】
#include<bits/stdc++.h> using namespace std; const int MAXN = 200005; const int MAXV = 1e9; const long long INF = 1e18; template <typename T> void read(T &x) { x = 0; int f = 1; char c = getc