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)的数有状压反应!!!
  • 相关阅读:
    /etc/fstab 文件解释
    CRLF和LF
    Git远程操作详解
    jsp错误处理
    jsp隐式对象
    关于循环队列要注意的
    JSP动作元素
    JSP指令
    jsp语法简介
    jsp声明周期
  • 原文地址:https://www.cnblogs.com/ACGO/p/7173534.html
Copyright © 2011-2022 走看看