2018 Multi-University Training Contest 3

2018 Multi-University Training Contest 2

题解

A - Problem A. Ascending Rating

题目描述:给定一个序列,分别求出所有长度为\(m\)的区间的\(maxrating, count\),对于每个长度为\(m\)的区间,一开始\(maxrating=-1, count=0\),然后从左往右扫,扫到一个大于\(maxrating\)的值时,\(count+1, maxrating=\)那个数。

solution

从左往右做,用单调队列维护当前一段单调不上升的序列,当添加一个数进来时,删掉的数的下一个最大值就是新加进来的数,将下一个最大值看成父亲,用并查集维护,那么一个区间的答案就是区间左端点的根的值和到根的距离。每个数只会进队一次,退队一次,因此时间复杂度是\(O(n)\)

时间复杂度:\(O(n)\)

C - Problem C. Dynamic Graph Matching

题目描述:有\(n\)个点,有\(m\)次操作,每次操作要么加一条边,要么删一条边,求出每次操作后,对于所有的\(k\), 恰好\(k\)条边的匹配(即\(2k\)个点两个两个匹配)方案数。

solution

记\(f[sett]\)表示\(sett\)集合的点已匹配的方案数,加一条边\((u, v)\),就枚举除去\(u, v\)的集合,更新加上\(u, v\)的答案,删除类似。

时间复杂度:\(O(m2^n)\);

D - Problem D. Euler Function

题目描述:求出第\(k\)个欧拉函数是合数的\(n\).

solution

第一个是\(5\),第二个是\(7\),考虑\(n>7\)

令\(n=2^dx\),因为欧拉函数是积性函数,所以\(\varphi(n)=\varphi(2^d)\varphi(x)\)

若\(x=1\),则\(\varphi(n)=\varphi(2^d)=2^{d-1}\)合数

若\(x\neq 1\), 则\(\varphi(x) \neq 1\), 所以\(\varphi(n)\)合数

因此\(n>7\)的欧拉函数都是合数。

时间复杂度:\(O(1)\)

F - Problem F. Grab The Tree

题目描述:给定一棵树,树上有点权,每次\(A\)选一个点拿走,然后\(B\)把\(A\)选的点的邻点拿走,最后把整棵树拿走,每个人把拿走的点的权值异或起来,谁大谁赢,问在最优策略下,最终的结果。

solution

假设\(A\)的值是\(x\),则\(B\)的值为整棵树的值的异或和再异或\(x\),若整棵树的异或和为\(0\),则平手。否则将这棵树分层,会发现对于一种选取的方案,\(A, B\)选择的点是可以交换的,即交换后也是一种可行的方案,所以\(A\)必胜。

时间复杂度:\(O(n)\)

G - Problem G. Interstellar Travel

题目描述:把原本的题目等价于:当坐标相同时只保留编号较小的点,求字典序最小的凸壳。

solution

字典序最小的凸壳。

时间复杂度:\(O(n)\)

H - Problem H. Monster Hunter

题目描述:有一棵以\(1\)为根的有根树,除了根,每个点都有一只怪物,从根出发,遇到怪物时会先扣\(A_i\)血,再回\(B_i\)血,然后怪物消失,任何时刻的血量不能低于\(0\),问一开始至少要有多少血,才能打完所有怪。

solution

先不考虑打怪时要先打父亲才能打儿子。那肯定先打\(A_i<B_i\)的怪,对于\(A_i<B_i\)的怪,先打\(A_i\)小的。对于\(A_i \geq B_i\)的怪,考虑\(i, j\)两只怪兽,先打\(i\),则血量减小\(A_i+A_j-B_i\),先打\(j\),则血量减小\(A_i+A_j-B_j\),因此先打\(B_i\)大的。

假设求出来的攻击顺序为\(p_1, p_2, ..., p_n\)

若\(p_1\)没有父亲,则打\(p_1\)

否则在打完\(p_1\)的父亲后,紧接着打\(p_1\)最优,因此可以将\(p_1\)和父亲合并,将\(p_1\)的儿子的父亲改成\(p_1\)的父亲。

重复操作,每次操作都会少一只怪,所以只要按照打怪的规则维护一个堆,用并查集维护父亲。

时间复杂度:\(O(nlogn)\)

I - Problem I. Random Sequence

题目描述:给定一个序列\(a_i\),如果\(a_i=0\),则可以用\([1, m]\)中的数替换,再给定一个长度为\(m\)的数组\(v\),求

\[\prod_{i=1}^{n-3}v[gcd(a_i, a_{i+1}, a_{i+2}, a_{i+3})]\]

的期望值。

solution

\(f[i][j][k][p]\)表示到第\(i\)个数,前三个数的\(gcd=j\),前两个数的\(gcd=k\),前一个数的\(gcd=p\),然后枚举\(i+1\)是什么数,更新状态。因为\(gcd\)的原因,所以\(j|k, k|p\),因此状态数不多。

时间复杂度:\(O(能过)\)

L - Problem L. Visual Cube

题目描述:给出长方体的长宽高,输出这个长方体。

solution

找规律。

时间复杂度:\(O(边长^2)\)

M - Problem M. Walking Plan

题目描述:给定一个\(n\)个点,\(m\)条边的有向图,边有权值,\(q\)个询问,每次询问\(u\)到\(v\)至少经过\(k\)条边的最小值。

solution

分块,每走\(100\)步分一块,预处理出每两个点恰好走\(i\)步的最小值,至少走\(i\)步的最小值,然后\(100\)步\(100\)步地走,处理出恰好走\(100i\)步的最小值。询问时先整百地走,再加上至少走\(i\)步的最小值即可。

时间复杂度:\(O(n^3\sqrt{k}+qn)\)

原文地址:https://www.cnblogs.com/GerynOhenz/p/9498713.html

时间: 2024-10-07 13:11:07

2018 Multi-University Training Contest 3的相关文章

2018 Nowcoder Multi-University Training Contest 2

Practice Link A. run 题意: 白云每次可以移动\(1\)米或者\(k\)米,询问移动的米数在\([L, R]\)范围内的方案数有多少. 思路: \(dp[i][2]\)表示到第\(i\)米,是通过\(1\)米的方式过来的还是\(k\)米的方式过来的,递推即可. 代码: #include <bits/stdc++.h> using namespace std; #define N 100010 const int p = 1e9 + 7; int f[N][2], g[N];

2018 Nowcoder Multi-University Training Contest 1

Practice Link J. Different Integers 题意: 给出\(n\)个数,每次询问\((l_i, r_i)\),表示\(a_1, \cdots, a_i, a_j, \cdots, a_n\)中有多少个不同的数. 思路: 先分别离线求出\(a_1, \cdots a_i\)以及\(a_j, \cdots, a_n\)中有多少个不同的数. 再考虑有多少个数既在\([1, i]\)中也在\([j, n]\)中,再离线做一次. 考虑一个数第一次出现的时候,那么这个数下一次出现

2018 Nowcoder Multi-University Training Contest 5

Practice Link A. gpa 题意: 有\(n\)门课程,每门课程的学分为\(s_i\),绩点为\(c_i\),要求最多删除\(k\)门课程,使得gpa最高. gpa计算方式如下: \[ \begin{eqnarray*} gpa = \frac{\sum s_ic_i}{\sum s_i} \end{eqnarray*} \] 思路: 首先删去的课程越多,gpa肯定不会变得更差. 所以我们肯定是删去\(k\)门课程. 考虑二分答案,check的时候要满足: \[ \begin{eq

HDU 2018 Multi-University Training Contest 3 Problem A. Ascending Rating 【单调队列优化】

任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6319 Problem A. Ascending Rating Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 5943    Accepted Submission(s): 2004 Problem Description Before

杭电2018多校第一场(2018 Multi-University Training Contest 1) 1001.Maximum Multiple (HDU6298)-数学思维题(脑子是个好东西,可惜我没有)

暑假杭电多校第一场,这一场是贪心场,很多贪心的题目,但是自己太菜,姿势挫死了,把自己都写吐了... 2018 Multi-University Training Contest 1 HDU6298.Maximum Multiple 题目意思就是给你一个n,找出来三个数x,y,z, 使得n=x+y+z,而且x,y,z都是n的因数,并且x*y*z为最大值,让你输出来x*y*z的最大值.如果没有满足条件的情况就输出-1. 由1=1/2+1/3+1/6=1/3+1/3+1/3=1/2+1/4+1/4,所

2018 Multi-University Training Contest 4

Problem D. Nothing is Impossible Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 504    Accepted Submission(s): 302 Problem Description m students, including Kazari, will take an exam tomorrow

HDU 6396 Swordsman --------2018 Multi-University Training Contest 7 (模拟+读入挂)

原题地址: 打怪升级 一开始有N个怪物:主角有K个能力:只有K个能力都击败怪物才能斩杀怪物并获得K个能力的增值:问最多能杀几个怪物: 做法: 用优先队列把怪物能力装进去:能力小放前面: 最重要的是数据量要用读入挂才能过:(读入挂太神奇了!!) Swordsman Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 2049    Acce

2018 Multi-University Training Contest 1 Distinct Values 【贪心 + set】

任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6301 Distinct Values Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5312    Accepted Submission(s): 1823 Problem Description Chiaki has an array of

2018 Multi-University Training Contest 4 Problem L. Graph Theory Homework 【YY】

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6343 Problem L. Graph Theory Homework Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1536    Accepted Submission(s): 830 Problem Description Ther