DAY1
A UVAlive 3937 painting the sticks
给你一些木棒,按照给定的颜色序列染色,每次最多可以染连续的3块(每块的颜色可以不一样),每块可以由任意多个连续木棒组成,求最少步数。
题目里有说不允许覆盖染色吗?统计不同的颜色块的个数,除以3并向上取整就是答案了。。
B UValive3938 "Ray, Pass me the dishes!"
给一个长度为n的序列,有m个询问,每次询问某个区间内的和最大的子区间
线段树问题,对于线段树上的每个节点维护ans,以及前缀和的最大值,最小值,但需要注意的是对于[l,r]这个区间,要维护[l-1,r-1]区间的前缀和最小值。
C UVAlive3939 Plucking fruits
给你一张无向图,和m个询问,每次询问从a到b存不存在一条路径,路径上每条边的权值都大于c
最小瓶颈生成树,离线解决,先将边权从大到小排序,依次加边,在加边Wi之前,处理所有c大于Wi,且小于等于W(i-1)的询问,如果此时a和b在一个集合里,就是存在,反之则不存在,因为以后添加的边权都会小于c。
F - Remember the Word UVAlive3941
给你一个字符串T, 和一个包含很多字符串的集合, 问集合中的字符串组成T的方案数
DP f[i] 表示组成T[1...i]的方案数 f[j] = f[j] + f[i] if s[i+1...j] in set
用trie树 优化递推, 可以减少不必要的状态转移
G - Liking‘s Letter UVAlive3943
求一个字符串中出现次数超过1次的最长子串
后缀数组,直接取高度数组中的最大值即可,但此题对时间要求很高,快速排序版本的过不了,用的基数排序才勉强过的。。。
I Cake slicing UVAlive3944
切蛋糕,使得每块蛋糕里有且只有一个草莓,每切一刀都有一个代价,求最小代价。
dp 用 f[i,j,k,l] 表示一个该问题的子问题,求解每个子问题,记忆化搜索。但要预处理一下每个方块有多少个草莓。
DAY2
A Ginkgo Numbers UValive6182
定义一种数和相应的乘法,求给定的一个gingo number 是不是素数
题目中给出了一个gingo number 是另一个 gingo number 的因子的充要条件, 利用这个充要条件暴力求解即可,数据规模很小。
C - One-Dimensional Cellular Automaton uvalive6184
矩阵乘法+快速幂的裸题
D - Find the Outlier UVAlive6185
给你一个多项式函数的阶数d,并给出0....d+2对应的函数值,其中有一个是错误的,找出来
枚举其中一个函数值,假设他是错的,将剩余的d+2的函数值构造成d+2个线性方程,含有d+1个未知数,进行高斯消元,判断是否有解,若无解则说明所枚举的即是答案
F - Never Wait for Weights Uvalive6187
在某一时刻,会告诉你某两个点的之间的差值,或者询问你某两个点之间的差值是多少?回答所有的询问
并查集问题,需要维护附加信息,就是孩子与父亲的差值,官方说法叫做偏移量,路径压缩和合并的时候主意维护偏移量就可以了。
DAY3
A - Beer Problem
题意描述不说了,比较简单的费用流问题,注意图是无向图,一条边可以拆成两条有向边就可以
C - Black and White
逆时针给你一些点的坐标,保证连接起来是个封闭图形,求面积
因为每条边的方向不是平行于就是垂直于x轴,所以就特别简单了,枚举一遍即可
D - Integer Numbers
给你一个整数数列,修改最少的数使其成为单调递增且连续的数列
求a[i]-i, 然后找那个相同的数的个数最多的数,答案就是n-maxsum
E - Islands
题意描述就不说了, 并查集并添加附加信息s[i] 表示以i为根的集合中点的个数
对于每个点,先求出与之相邻的六个点的坐标,然后求出有几个集合,以及每个集合的规模,如果合并后的联通块的规模满足条件
就保留这个点。
I - Radio Waves
求一个最大的覆盖半径,使得相同频率的调频不会相互覆盖
将所有点对之间的距离排序,然后从小到大加入并查集里,在并查集中维护两个点之间的关系,遇到第一条边,加入并查集后发生了冲突,则停止。
DAY4
A - Elevator
大水。。
B - Continuous Login
给定一个数N, 用最少的1...n的前缀和组合
在比赛中队友发现了一个规律,最多就用三个。。所以直接暴力
一个直接枚举,二个的话,枚举一个,二分一个,三个就枚举两个,二分最后一个。。
D - Ranking System
模拟题, 多关键字排序,然后枚举统计,主意细节就可以了。
F - Calculate the Function
给你一个序列,和m个询问,每次询问区间[l,r] Fi(Li) = ALi Fi(Li + 1) = A(Li + 1)
for all x >= Li + 2, Fi(x) = Fi(x - 1) + Fi(x - 2) × Ax 求F[r]
线段树问题, 每个节点是一个矩阵, 区间合并时做矩阵乘法,然后对每个区间询问,就可以快速知道对应的矩阵
剩下的就比较简单了
I - ?(>_o)!
卖萌的题。。。
DAY5
A - Special Experiment
给你N个数,要求你去掉一些数,使得剩余的数任意两个的差值都不等于另外的M个数,并使和最大
枚举任意两个数,如果他们的差值等于那M个数中的某个,便在他们之间连一条边,最后求这张图的最大点权独立集。
题目暗示了这张图是棵树。。所以就很简单了,用树形dp即可。
F - Sum of Factorials
给你一个数,判断是不是一些斐波那契数字的和
背包问题。
solution