zoukankan      html  css  js  c++  java
  • 考试总结 模拟63

    考试遇到的问题:

    很没有状态的一场考试T1调了半天的nth_element,而且还没记得复杂度,

    然后发现了nth_element(a+l,a+k,a+r),其中的k表示[l,r]中第k小元素且l!=1时k应该+l-1

    后来又发现交上去的代码有如下若干问题:

    1.线筛打错了,应该是if(v[i]<prm[j])break;

    2.s1,s2数组开到了1e8。。。

    3.交的代码没删调试

    T2题干的问题?虽然好多人看出来没说取abs

    T1坑

    T2

    一个显然的贪心,考场上比较犹豫的,每个人都去拿当前最大的,否则同样一次机会,会让对手拿到更大的

    那么考虑怎么维护?$O(kn)$是可以的

    那么每次就可以开个桶,然后每次记录最大值然后每次 while(!t[mx])--mx;   当然要离散化

    T3

    考场上想多了证明了一下是否是让旅行家的更少

    旅行家每次扔食物的操作就会使其经过的点权加大,只会让后者更大

    考虑dp

    定义f[i][j]表示从i的子树某点走向i 撒下了j的面包渣的贡献

    定义g[i][j]表示从i走向子树中某点撒了j面包渣的贡献

    转移 f[x][j]=max{g[y][j-1]+sum[x]-a[y]}sum[x]为与x相连的所有点的点权和,多出来的贡献就是sum[x]-a[y]

    g[x][j]=max(g[y][j-1]+sum[x]-a[fa])为什么要-a[fa]?考虑最终对ans做贡献:

    ans=max(ans,f[x][j]+g[x][V-j])两者必须要减去一个拼接点x的fa

    对于每个点dp正反跑两边:第一遍按照一个顺序更新出的x的dp值拼接相当于从左到右的方向

    另一种方向也要考虑了

    愿你在迷茫时,记起自己的珍贵。
  • 相关阅读:
    SAP系统报错
    基金投资
    Reading: 重构相关
    C/C++: static variables
    C/C++: 如何删除本地文件/读取某个目录下符合某种pattern的所有文件路径
    如何在Linux下建立包含lua vm的unit test framwork
    C++实现字符串分割(类似于Python的split方法)
    postMan 汉化
    搞懂MySQL InnoDB事务ACID实现原理
    mysql 索引优化
  • 原文地址:https://www.cnblogs.com/casun547/p/11635766.html
Copyright © 2011-2022 走看看