UESTC 2017 Summer Training #6~10补题

UESTC 2017 Summer Training #6 Div.1

A 模拟 用to数组记录满足条件连续的字符段,比赛的时候想的复杂,写的很炸,优化代码写法的能力需要提升!!!

WQF代码

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}\)。先把每行状态用二进制表示,然后枚举每行要不要安放炸弹,最后判断剩余需要被炸掉列的数目是否小于等于炸弹数,并且更新答案。

WQF代码

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个下载串口连边到汇点

WQF代码

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\)的数有状压反应!!!

posted on 2017-07-15 00:24  ACGO  阅读(211)  评论(0编辑  收藏  举报

导航