Xiangtan Invitation Contest 2017(2017湘潭邀请赛)(Done)

来源:互联网 发布:电力线路输送网络信号 编辑:程序博客网 时间:2024/05/16 14:33

叉姐出的题。
题目链接:
点击打开题目链接
12601269.

A.Determinant.Accept
题解:把矩阵补全成nn的。那么题目就是要你求逆矩阵的第一列,高斯消元就可以啦。

B.Roads.Accept
题解:
考虑Kruskal的过程,肯定是同样权值的边连通了一个点集。如果要让最小生成树变大,就是要让某个权值的边不再连通。这是全局最小割问题,直接网络流。也可以用Stoer–Wagner 算法求全局最小割。

C.Intersection.Accept
题解:
先求出A的秩a,再求出B的秩b,然后再把AB组合在一起,再求这个的秩c,高斯消元即可。那么答案就是2(a+bc)

D.SuperResolution.Accept
题解:签到题。直接输出。

E.PartialSum.Accept
题解:感觉是脑洞题。直接对前缀和排序,枚举m并更新答案。

F.LongestCommonSubsequence.Accept
题意:给定序列A,含n个数。和一个数m;有一个X序列x1,x2,x3x1,x2,x3来自[1,m]区间内的数。
f(k)表示两个序列的最长公共子序列为k,让你求序列XA满足f(0),f(1),f(2),f(3)X各有多少种。

题解:设n个数中在m范围内的不同数的数量为count,然后计算(mcount)3即为f(0).
首先对a离散化,之后可以O(n3) 枚举序列X.如果之后用O(n)LCS,dp 会使复杂度变成O(n4).
解决方法是23 枚举X的一个子序列,通过预处理一个next[i][c]表示i位置后c字符第一次出现的位置,来O(1) 判断是否是A 的子序列。

G.Parentheses.Accept
题意:从左到右有n个连续的组,每一组有Li个括号,要么全是左括号,要么全是右括号,以及该组的每一个左括号翻成右括号,或者右括号翻成左括号的花费Di.可以对这n个组的括号进行翻转,每一个括号都可以选择翻或者不翻,使整个括号序列是一个合法括号序列.

题解:贪心吧。
括号序列就是要求前(2k+1) 个里面至少要有k个左括号。那么先把所有括号翻成右括号,之后重新翻回左括号。那么从左到右贪心,用一个堆维护现在可以翻回左括号的位置。每次相当于加两个当前段的字符,取一个最小的。所以事件只有最小的被拿完了,或者当前段拿完了。模拟即可。std

H.Highway.Accept
题解:
假设初始点v0 是某条直径的端点。那么距离v0 最远的v1 必然是直径的另一个端点。
又因为距离任意点最远的要么是v0 要么是v1,所以剩下的点只需要连往v0v1 中较远的一个即可。我直接dfs 3次就过了。

I.StrangeOptimization.Accept
题解:
就是让你求:gcd(n,m)2nm,约分一下就可以了。

J.SimilarSubsequence.Accept
题解:dp题。
dp[i][j][k]中,i表示a串中第i个元素,j表示b串中的第j个元素,
当a[i]==0时,k为第i~n个被匹配的元素中最大值。
当a[i]==1时,k为第i~n个被匹配的元素中最小值。
用树状数组可以优化到O(nm2log(m))

官方题解是四维dp。
f(i,j,x,y) 表示分别匹配到aibj,数字的上界和下界分别是
xy的方案数。注意到xy总有一个等于bj,所以状态数是
nm2的。
转移就是枚举ai+1匹配的是bk,要求bk落在[x,y]中。这个可
以用树状数组优化。复杂度是O(nm2log(m)).

阅读全文
2 0
原创粉丝点击