UESTC 2017 Summer Training #6~10补题
UESTC 2017 Summer Training #6 Div.1
A 模拟 用to数组记录满足条件连续的字符段,比赛的时候想的复杂,写的很炸,优化代码写法的能力需要提升!!!
B (暂时不用补)0
C (暂时不用补)0
D (暂时不用补)0
G(暂时不用补)0
I (暂时不用补)0
K (暂时不用补)1
L (暂时不用补)1
M (暂时不用补)0
UESTC 2017 Summer Training #7 Div.1
A(暂时不用补)2
C 状态压缩+dfs 这题肯定不能枚举点,考虑枚举行,复杂度也就\(2^{25}\)。先把每行状态用二进制表示,然后枚举每行要不要安放炸弹,最后判断剩余需要被炸掉列的数目是否小于等于炸弹数,并且更新答案。
D SG函数 考虑叶子节点肯定是必败态(这里的叶子节点是指机器人最后不能再走下去的节点),然后由深度大的节点向深度小的转移。
ps:一味的套SG函数的板子,把hash值开成全局变量,显然这题不能这样,幸好队友发现了,及时补救。。。
WQF代码
H \(nlogn\)的\(LIS\)+乱搞
- 首先对点排序。因为x轴和y轴坐标必须严格递增,故对x从小到大排若\(x\)相等对\(y\)从大到小排。然后对这些坐标进行\(nlogn\)的\(LIS\)。
- 其次我们考虑乱♀搞♂。首先如果\(dp[x] = LIS\)那么第\(x\)个数必然属于集合\(A\),否则\(dp[x] != LIS\)那么考虑\(\{y|dp[y] = dp[x] + 1\}\)如果\(a[x] < max\{a[y]\}\) ,那么\(a[x] \in A\),所以我们要维护每种\(LIS\)长度的最大值然后从后往前扫描序列。其次容易证明如果一个数必然出现在\(LIS\)里那么他必然固定出现在某一位上,所以我们可以统计\(LIS\)每一位可能出现的数的种类,若其值为1且\(a[x] \in A\),则\(a[x] \in B\)。
I(暂时不用补)1
K(暂时不用补)0
L cdq分治+动态最小生成树 原题是bzoj20101 有空慢慢研究吧
UESTC 2017 Summer Training #9 Div.1
J网络流 题意大概是有s个传感器,分别将数据传给q个队列,共有n次机会向地球传数据,每次最多能传d大小的数据。 考虑建图:
1.源点将每次传的数据给对应的队列
2.将q个队列拆点,因为每个队列只能存储ci的数据,并且因为n次机会的时间性,n次q个队列数据是可以传递的
3.n次q个队列连边到地球上下载串口,n个下载串口连边到汇点
K 计算几何 ,因为每条边均大于30m,角度均大于18°,那么半径为4的圆是可以包含在凸角内的,那么,只需要求出所有可能存在的圆,\(O(n^2)\)去判断是否满足距离大于8即可
[Megumin的代码] (代码什么的,当然是不存在的呀)
UESTC 2017 Summer Training #10 Div.1
H FFT 一个数是第K大的话,那么他左边比他大的数的个数是a的话,那么他右边比他大的数的个数是K-1-a,之后就先用FFT预处理出每个位置是第K大的种数,O(1)查询即可。
J 数论题,由于x的取值不超过一千个,那么预处理每个数所含的\(x^2\)因子比预处理每个数所含的\(y\)因子所需的时间损耗更小,而在枚举时,需要对v数组初始化,很显然枚举y,判断x是否存在的时间损耗更小
[Megumin的代码] (代码什么的,当然是不存在的呀)
K 状压\(dp\)
- 很美妙的一道\(dp\)题。首先我们可以从"前K个数","人们顺序说",这些关键词中看出\(dp\)。其次这个\(K\)要怎么用到\(dp\)方程中呢?注意到\(K\)最大仅为\(10\)!!!故考虑状压。
- 这里的\(dp\)表示和转移有点意思,故多解释一点。令\(dp[i][s]\)表示前i个人,\(i\)前\(K\)个人(包括\(i\))的状态为\(s\)的最多的好人。等一等!题意的前\(k\)个人不包括\(i\)吧?是的!这就要研究一下转移方程。设\(lim=(1<<k)\)假设第\(i\)个人对于状态\(s\)是说真话,那么第\(i\)个人可能是好人也可能是坏人,故\(dp[i][(s+lim)>>1]=max\{dp[i-1][s]+1, dp[i][(s+lim)>>1]\}\),\(dp[i][(s>>1)]=max\{dp[i-1][s], dp[i][(s>>1)]\}\)。现在我们很清楚地看出即使包含了\(i\)还是可以通过\(dp[i-1][s]\)转移,而\(dp[i-1][s]\)就包含了\(i\)的前\(K\)个人的信息。继续转移方程,如果说的是假话,那么断定此人为坏人,故\(dp[i][(s>>1)]=max\{dp[i-1][s], dp[i][(s>>1)]\}\)。
- \(dp\)方程里采用了右移是因为能自动舍弃最后一位。
- 解\(dp\)题的时候一定要对范围小于\(20\)的数有状压反应!!!