2017-2018 ACM-ICPC Pacific Northwest Regional Contest (Div. 1)

2017-2018 ACM-ICPC Pacific Northwest Regional Contest (Div. 1)

Odd Palindrome

题目描述:给出一个字符串,判断是否存在一个子串,满足长度为奇数,且为回文串。

solution
暴力枚举。

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

Enlarging Enthusiasm

题目描述:有\(n\)个人,每个人有一个成绩\(p_i\),每个\(p_i\)都不相同。现给定一个数\(x\),给每一个人分配一个数\(q_i \geq 1\),满足\(\sum q_i=x\)。每个人的总成绩为\(p_i+q_i\),现按\(q_i\)从小到大排序,若\(q_i\)相同,则按\(p_i\)从小到大排序。按顺序宣布成绩,使得每宣布一个人的成绩,成绩最高的人会变化。问最终的排名有多少种。

solution
显然,\(q_i\)要是多大,只跟排在它前面一个人的总成绩有关,所以可以用状压dp
因为\(q_i\)要递增,所以可以考虑差分。
\(y_i \geq 0, p_i=\sum_{j=1}^{i} y_j, \sigma_i\)为一个\(n\)排列表示排名为\(i\)的是谁。
\(\because p_{\sigma_{i-1}}+q_{\sigma_{i-1}}<p_{\sigma_{i}}+q_{\sigma_{i}}\)
\(\therefore p_{\sigma_{i-1}}<p_{\sigma_{i}}+y_i\)
\(\therefore y_i>p_{\sigma_{i}}-p_{\sigma_{i-1}}\)

\(\because \sum p_i \leq x\)(多出来的给最后一个人即可,不影响排名)
\(\therefore \sum_{i=1}^{n} (n-i+1)y_i \leq x\)

假设到了排名\(i\)\(x\)还剩\(rest\),则\(y_i \leq \frac{rest}{n-i+1}\)

\(f[sett][rest][pv]\)表示\(sett\)中的人已经排在前面,\(x\)还剩\(rest\),前一个人为\(pv\)
枚举\(i\)表示下一个人,按照前面的分析求出\(y_i\),显然\(y_i\)最小最好,但也不能超出最大值的限制。状态转移也比较简单。

时间复杂度:\(O(2^n x n^2)\)

Fear Factoring

题目描述:定义\(f(n)\)表示\(n\)的因数的和。给出两个数\(a, b\),求\(\sum_{i=a}^{b} f(i)\)

solution
设因数\(d\),在\(a\)~\(b\)中,\(d\)的倍数除以\(d\)得到的数是连续的,即可以用求和公式得到。
\(x\)\(a\)~\(b\)中第一个\(d\)的倍数,则\(x=max((\frac{a-1}{d}+1)*d, d*d)\)(避免重复)
\(s\)\(a\)~\(b\)中大于等于\(x\)\(d\)的倍数的个数\(s=\frac{b-x}{d}+1\)
更新答案\((s*d)+(\frac{x}{d}+\frac{x}{d}+s-1)*\frac{s}{2}\),注意:如果\(x=d*d\),则答案要减去\(d\)(重复)。

时间复杂度:\(O(\sqrt{b})\)

Rainbow Roads

题目描述:给出一棵树,每条边有一种颜色。定义一条彩虹路为路径上的相邻边的颜色不一样。定义一个好点为从该点出发的所有路径都是彩虹路。输出所有好点。

solution
树形dp,仔细分析即可。

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

Straight Shot

题目描述:在一个二维平面上,在原点放一个机器人,速度为\(v_0\),现要机器人最快地走到\((x, 0)\)。但中间有不相交的\(n\)条滑道,第\(i\)条滑道的范围为\([L_i, R_i]\),滑道会给机器人一个竖直的速度\(v_i\),但机器人面向的方向不变,问机器人最短多长时间到达终点。或时间长于两倍直线时间。

solution
显然,滑道可以全部连在一起,即将所有滑道并排移到最后,然后从终点倒着走回去,找到离开滑道的坐标,最快就是从\((0, 0)\)走到那个坐标。然后判断一下时间即可。

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

Distinct Distances

题目描述:给出\(n\)个点,然后在平面上找到一个点\(p\),使得每个点到\(p\)的距离的不同值最少。输出最少值。

solution
\(p\)点选择有三种情况:

  1. 两个点的中点
  2. 三点构成的圆的圆心
  3. 两点的垂直平分线与另外两个垂直平分线的交点。

时间复杂度:\(O(n^5logn)\)

Security Badge

Avoiding Airports

题目描述:有\(n\)个城市,\(m\)条航线,每条航线连接两个城市(起点为a_i, 终点为\(b_i\)),有一个起飞时间\(s_i\)和一个到达时间\(e_i\),现在从\(1\)出发到\(n\),使得在每个城市的等待时间的平方和最少。输出最小值。

solution
\(e_i\)从小到大排序,假设使用第\(i\)条航线时等待时间的平方和为\(f[i]\),假设前一条航线为\(j\),则\(f[i]=min_{b_j=a_i} (f[j]+(s_i-e_j)^2)\)
\(f[i]=min_{b_j=a_i} (f[j]+(s_i-e_j)^2)\)
\(f[i]=min_{b_j=a_i} (f[j]+s_i^2-2s_ie_j+e_j^2)\)
\(f[i]=min_{b_j=a_i} (f[j]+s_i^2-2s_ie_j+e_j^2)\)

\(i\)一定时,取\(-2e_js_i+f[j]+e_j^2\)的最小值,设\(A=-2e_j, B=f[j]+e_j^2\),可以将其看成一条直线\(Ax+B\),也就是在很多条直线上选\(x=s_i\)的最小值。所以在每个城市维护一个凸壳,询问时二分查找即可。

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

Long Long Strings

题目描述:有一个很长的字符串,有两种操作:1、删除某个位置的字符。2、在某个位置插入某个字符。给出两组操作,问这两组操作得到的字符串是否相同。

solution
将初始字符串看成一个\([1, 10^{11}]\)的区间,然后将这两种操作看成是区间操作,最后判断最后得出的区间是否相同。

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

Grid Coloring

题目描述:有一个\(m \times n\)的网格图,每个格子将涂成红色或者蓝色,但要满足下面条件:

  1. 每个格子都要涂颜色
  2. 有些格子的颜色已经决定,不能改变。
  3. 当某个格子\((x, y)\)的颜色为蓝色时,以\((1, 1)\)\((x, y)\)形成的矩形一定都是蓝色。
    求有多少种涂色的方案。

solution
只需要关注蓝色的格子即可,其它的格子都是红色,而且每一行只需要考虑最右边那个蓝色格子。
如果第\(i\)行第\(j\)列是蓝色的格子,则后面的行的蓝色格子的列小于\(j\),否则前面第\(i\)行第\(j\)列的蓝色格子没有作用。按照这来dp

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

Spinning Up Palindromes

题目描述:给出一个字符串,字符串的每一位为\(0\)~\(9\),每次操作给某一位加一,如果这一位变成\(10\),则将这一位变成\(0\),然后前一位加一,如果又变成\(10\),则继续一样的操作,当第一位变成\(10\)时,将其变成\(0\)即可。问至少需要多少操作使得字符串变成一个回文串。

solution
不会。

Delayed Work

题目描述:有一个刷屋子的工作,请一个工人需要\(X\)元,如果刷屋子需要\(D\)天,则要付\(D \cdot P\)元,如果有\(M\)个人,则需要\(\left \lceil \frac{K}{M} \right \rceil\)。问最少需要多少钱。

solution
枚举即可,显然\(M \leq K\)

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

Unsatisfying

题目描述:有\(n\)条表达式,每条表达式有两个变量,中间的运算符为\(\vee\),每个变量前有可能有\(NOT\)符号。现在可以添加一些表达式,这些表达式没有\(NOT\),使得全部表达式不全为真,问最少添加多少表达式。

solution
\(2-SAT\)的做法构图,问题变成在图中添加一些边(从负指向正的边),使得存在一个\(i\)\(i\)\(NOT\) \(i\)在一个环内。设\(f(x)\)表示\(x\)能到的点的集合,\(r(x)\)表示能到\(x\)的点的集合。
假如原图已经存在,上述的环,则答案为\(0\)
如果\(f(i)\)\(f(NOT\) \(i)\)的交集存在\(NOT\)点,以及\(r(i)\)\(r(NOT\) \(i)\)的交集存在正点,则只需一条表达式即可。
如果\(f(i)\)存在\(NOT\)点,\(r(NOT\) \(i)\)存在正点,则只需两条表达式即可。
否则无解。

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

转载于:https://www.cnblogs.com/GerynOhenz/p/8520609.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值