2019 Multi-University Training Contest 6

原来我不仅不会的题多,会写的也写得慢…

1002 Nonsense Time

题意

给出一个 n ( n ≤ 5 × 1 0 4 ) n(n\le 5\times 10^4) n(n5×104)的排列,一开始所有数字是不可用的,第 i i i 个时刻解锁 p i p_i pi 位置上面的数字,输出 n n n 个数字,表示在第 i i i 个时刻,所有已解锁的数字的最长上升子序列长度。
重点:数据保证是随机生成的

题解

数据是随机的,那么一个排列期望的LIS长度在 O ( n ) O(\sqrt n) O(n )级别的,这个结论是我暴力跑出来的。
倒着做,先求出整个排列的LIS,并记录下其中一种LIS的方案,然后按时间去掉点,这个点正好在LIS上的概率是 1 n \frac{1}{\sqrt n} n 1的,那么此时就对当前数列重新跑一边LIS,否则答案不变。
这里我的LIS求方案挂了很多次,用了一些Naive的方法,这里写一下正确的弄法:
每次加入一个点,都记录它是从哪转移过来的,最后从 D P [ l e n ] DP[len] DP[len] 搜索方案。
要去掉 n n n 个点,期望重做LIS n \sqrt n n 次,一次LIS是 O ( n l o g n ) O(nlogn) O(nlogn) 的,那么期望总复杂度就是 O ( n n   l o g n ) O(n\sqrt n\ logn) O(nn  logn)

1004 Speed Dog

题意

这标题是提速狗?
给出 n ( n ≤ 250000 ) n(n\le 250000) n(n250000) a i ,   b i ( 1 ≤ a i , b i ≤ 1000 ) a_i,\ b_i(1\le a_i, b_i\le 1000) ai, bi(1ai,bi1000),每一对 a i ,   b i a_i,\ b_i ai, bi都可以自行选择一个 0 ≤ x i ≤ 1 0\le x_i\le 1 0xi1
A = ∑ i = 1 n a i × x i ,   B = ∑ i = 1 n a i × ( 1 − x i ) A = \sum_{i=1}^n a_i\times x_i,\ B= \sum_{i=1}^n a_i\times (1-x_i) A=i=1nai×xi, B=i=1nai×(1xi)
输出 n n n个分数,表示当 n = i n=i n=i时,能使 m a x ( A , B ) max(A,B) max(A,B)的最小值。

题解

先说jls的做法吧,贪心,将 a i b i \frac{a_i}{b_i} biai 排个序,小的全给A,大的全给B,只留中间一个,按照最优策略分配。
那么可以维护一个大根堆,表示A选好的,一个小根堆,表示B选好的。
每次加入一个物品,先简单地把它加入其中一个堆,之后再通过调整恢复到一开始的最优策略。
a i ,   b i a_i,\ bi ai, bi都很小,调整次数可以认为很少,所以复杂度能够接受。

1005 Snowy Smile

题意

队友写得,看都没看

1006 Faraway

题意

n ( n ≤ 10 ) n(n\le 10) n(n10)个士兵,给出边界 m   ( m ≤ 1 0 9 ) m\ (m\le10^9) m (m109),他们有一个共同的目标点 ( x e ,   y e )   ( 0 ≤ x e ,   y e ≤ m ≤ 1 0 9 ) (x_e,\ y_e)\ (0\le x_e,\ y_e\le m\le10^9) (xe, ye) (0xe, yem109)
告诉你每个人的坐标 x i ,   y i   ( 0 ≤ x e ,   y e ≤ m ) x_i,\ y_i\ (0\le x_e,\ y_e\le m) xi, yi (0xe, yem),以及一个 k i ( 2 ≤ k i ≤ 5 ) k_i(2\le k_i\le5) ki(2ki5)和一个 t i ( 0 ≤ t i &lt; k i ) t_i(0\le t_i&lt;k_i) ti(0ti<ki),表示这个士兵到目标点的
曼哈顿距离 m o d   k i = t i mod\ k_i= t_i mod ki=ti
求有多少个点是可能的目标点。

题解

每个士兵作为一个坐标原点建立直角坐标系,那么当目标点处于它的四个象限时,计算曼哈顿距离的式子是不同的。
那么这 n n n 个点可以将平面划分为 n 2 n^2 n2 块矩形区域,可以确定每个区域内的点对这 n n n 个点计算曼哈顿距离的式子,那么每个士兵都可以确定一个关系,那就是当 x e   %   k i x_e\ \%\ ki xe % ki确定时, y e   %   k i y_e\ \%\ ki ye % ki也可以确定,那么对于每个区域,枚举点的 x x x 值分别对 2 ,   3 ,   4 ,   5 2,\ 3,\ 4,\ 5 2, 3, 4, 5的取模情况,统计方案数,再对这 n n n 个士兵进行判定,确定 y y y 值对 2 ,   3 ,   4 ,   5 2,\ 3,\ 4,\ 5 2, 3, 4, 5的取值情况,计算出方案数,更新答案即可。
区域数量是 n 2 n^2 n2个,枚举取模情况是 O ( 60 ) O(60) O(60)的,统计方案数是每个区域均摊 O ( 60 ) O(60) O(60)的,每次确定一对 x ,   y x,\ y x, y关系是 O ( n ) O(n) O(n)的,所以总复杂度 O ( n 3 × 120 ) O(n^3\times 120) O(n3×120)

1008 TDL

题意

定义 f ( n , m ) f(n, m) f(n,m)表示大于 n n n 且和 n n n 互素的第 m ( 1 ≤ m ≤ 100 ) m(1\le m\le100) m(1m100) 个数。给出一个 k   ( 1 ≤ k ≤ 1 0 18 ) k\ (1\le k\le 10^{18}) k (1k1018),求最小的一个 n n n 满足
( f ( n ,   m ) − n )   x o r   n = k (f(n,\ m)-n)\ xor\ n=k (f(n, m)n) xor n=k

题解

互素的关系很好找,我和zsd简单推测,在 1 0 18 10^{18} 1018内枚举2000个数字即可找到100个互素的数字(后来sqy打表发现最大值为600+)。
不妨枚举这个 ( f ( n ,   m ) − n ) (f(n,\ m)-n) (f(n, m)n),根据推测,枚举上限依然定为2000,那么可以根据上面等式算出此时 n n n 的值,之后再简单判断一下 n n n加上我的枚举值是不是真的互素,通过测试后再暴力找 f ( n ,   m ) f(n,\ m) f(n, m),之后取一个最小的合法的 n n n即可。
若枚举上界为 p p p ,那么复杂度为大致 O ( p 2 l o g ( k ) ) O(p^2log(k)) O(p2log(k))

1012 Stay Real

题意

给你一个规模为 n   ( n ≤ 1 0 5 ) n\ (n\le 10^5) n (n105)的小根堆,两个人轮流从叶子节点取走数字,每个人都希望自己取出的数字和最大,求最终两个人分别取得的数字和。

题解

根据小根堆的性质,你如果取出了最大值,那么次大值此时一定是可取的,所以最优策略就是取当前最大值。
从大到小排个序,先手取奇后收取偶即可。

补题

  • 1002
  • 1004
  • 1006
  • 1008
  • 1012

看题

1001
1003
1005
1007
1009
1010
1011

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值