2019杭电多校第六场
过了6题,特别爽
1002. Nonsense Time
solved at 02:55
有一个\(1-n\)的排列\(p\), 一开始\(p\)所有位置全部无效,每次给出一个数\(k_i\),意味着\(k_i\)这个位置的数开始有效,每次使一个数有效就输出当前有效序列的LIS长度,\((1<=n<=5e4)\),保证数据是随机生成的 倒过来考虑,相当于从完整的序列中删去数字,如果删的数字不在LIS中那么显然结果不变,如果在LIS中就重新跑一边LIS
这里有一个结论(知乎搜的):\(1-n\)的排列的LIS的期望长度是\(\theta(\sqrt n)\)级别的,所以只会跑\(\sqrt n\)次LIS, 总复杂度\(O(n\sqrt n \log(n))\),时限长达14s, 肯定可以过
1 |
|
1005. Snowy Smile
solve at 00:32(+1)
差了三分钟痛失一血...
二维平面上有\(n\)个点,每个点有权值,你可以选择一个矩形,获得矩形区域内所有点的权值,求你能获得的最大值\((1<=n<=2000)\)
一看就是先离散化坐标然后枚举下边界再枚举上边界线段树维护最大子段和的套路,\(2000\)看上去就是个\(n^2\log(n)\)的复杂度
1 |
|
1006. Faraway
solved at 02:20
二维平面上有一个不知道在哪里的集合点(知道横纵坐标范围在\([0, m]\)内,你有\(n\)个士兵,你知道这些士兵的坐标\(x_i, y_i\)以及士兵到集合点的曼哈顿距离模\(k_i\)的结果\(t_i\), 求可能的集合点数量\(1<=n<=10, 2<=k<=5, 1<=m<=1e9,0<=x_i,y_i<=m,0<=t_i<k_i\)
首先曼哈顿距离有一个绝对值,先考虑怎么去掉,每个士兵可以把平面分为四个区域,每个区域的绝对值符号都是固定的,\(n\)个点最多分成\((n+1)^2\)个区域,最多不过121, 对于每一个区域,考虑\(lcm(k) \ast lcm(k)\)的正方形里的点,其他的点都可以通过平移这些点得到,因为\(k\)是2-5, 因此\(lcm\)最多60, 只要枚举\(60 \ast 60\)的点\(O(n)\)判断是否合法就好了,总复杂度\(O(60^2n^3)\),边界情况自行注意(我算的时候是左闭右开上闭下开,最后判右边和上面的线)
1 |
|
1008. TDL
solve at 01:10(+4)
定义\(f(n, m)\)为第\(m\)个比\(n\)大的与\(n\)互质的数
给你\(m\)和\(k = (f(n, m) - n)\, xor\, n\),求最小的\(n\)\((1<=k<=1e18, 1<=m<=100)\)
注意到\(m\)非常小,直接在k上下范围内搜就行了(我们取得是2048,好像500就够了)
1011. 11Dimensions
solve at 04:53(+3)
你有一个长度小于\(5e4\)的整数\(n\)和一个数\(m\),有些数位未知(以问号代替),已知\(n\)是\(m\)的整数倍,\(q\)次询问,每次给出一个数字\(k\),求第\(k\)小的满足条件的\(n\ mod\ 1e9+7\)的结果\((1<=m<=20, 1<=q<=1e5)\)
队友做法是先\(dp[i][j]\)表示前\(i-1\)位已经填完了,\(i-n\)位的数模\(m\)等于\(j\)的方案数
然后询问离线排序dfs,按位依次枚举填的数是啥,显然每次处理的区间一定是连续的,复杂度不太会算,似乎是\(O(10nm+10(n + q)\log(q))\)?, 反正跑的还挺快的...
1 |
|
1012. Stay Real
solve at 00:43
队友签的到