zoukankan      html  css  js  c++  java
  • 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)的数有状压反应!!!
  • 相关阅读:
    Educational Codeforces Round 20 D. Magazine Ad
    Educational Codeforces Round 20 C. Maximal GCD
    紫书第三章训练2 暴力集
    Educational Codeforces Round 20 B. Distances to Zero
    Educational Codeforces Round 20 A. Maximal Binary Matrix
    紫书第三章训练1 D
    紫书第一章训练1 D -Message Decoding
    HAZU校赛 Problem K: Deadline
    Mutual Training for Wannafly Union #8 D
    紫书第三章训练1 E
  • 原文地址:https://www.cnblogs.com/ACGO/p/7173534.html
Copyright © 2011-2022 走看看