zoukankan      html  css  js  c++  java
  • 多校训练随笔

    牛客训练一:

    J

    1,莫队算法,1e6的数据也能跑1s多过了,还是不错

    2,树状数组离线(标准解法),将询问以r排序即可,维护前缀的出现次数,出现相同数字保留后面的即可,比如1,2,1,2对应的sum[4]值为2(即维护0,0,1,1)

    3,同2,利用主席树的特征,可在线查询

    D

    next_permutation(a+1, a+1+n),直接用全排列枚举所有的情况,再去重

    E

    转换为求有多少种长度为n-m的子序列

    设计状态,要注意不能出现重复计数,即设计的状态要互斥,根据特征,dp[i][j],长度为i且末尾数字为j的序列种数

    初看是三重循环,但只要好好优化,复杂度O(nm)

    牛客训练二:

    AD 略

    I

    用对了正确的构造方法,本题就很简单

    J

    题意:有一个n*m大小的农田,每一块都有一种植物,告诉你每一块植物的种类,然后t次操作,每次给你一个矩形区域的左上角和右下角坐标,在该区域喷洒一种农药,与农药不是同一种类型的植物都会死亡,最后求所有操作之后共有多少植物死去。

    对每一个格子的数求和,若是初始值的倍数,则植物未死亡?

    比如4,1,3,显然是假算法

    学到了很巧妙的方法,将数据都映射成随机数据(最好是质数),这样再判断是否是倍数,正确率就很高了

    H

    题意:一棵树,点有点权。要选出三条不相交的链使得三条链的权值之和最大。

    对我来说神仙的树形dp题。

    研究子节点到父节点的转移,怎么将情况压缩成状态。

    f[i][j]表示以i为根的子树选了j条路径的最大权值和,

    g[i][j]表示以i为根的子树选了j条路径加一条包含i的竖直链的最大权值和。

    分析得出父树的解的各种情况,子节点逐个分析,发现答案由子树的f[i][j]、g[i][j]们凑出来,大佬设计的状态非常巧妙。

    hdoj训练2

    hdu6315

    1看似是区间修改,其实一次修改会对答案产生贡献的点最多logn个,那么我的做法是对于1操作打上lazy标记就行,查询的时候再去找产生贡献的位置,单点更新,用线段树维护min(ai-ai%bi)和对应的位置即可。复杂度O(N logn logn)

     牛客训练三

    #include <ext/rope>
    using namespace __gnu_cxx;

    rope容器(结构像块状链表,平均复杂度O(n*sqrt(n))  get

    牛客训练四

     CAMP-DAY1

    A

    最小费用最大流问题,流表示选择,费用表示收益。

    经典的建图:

    考虑费用流时把每个part拆成n个点,选择第i个点的代表为放置i块蛋糕和(i - 1)块蛋糕的时间差,这个时间差是递增的,因此在费用流的过程中必定会从小到大选择
    具体建图:左边n个点代表n个蛋糕,右边m * n个点代表m个part,每个part拆成n个点。源点向每个左边的点连一条流量1费用0的边,每个右边的点向汇点连一条流量1费用0的编。每个蛋糕向可以放的两个part的所有点连边,连向第i个点的费用为i^2 - (i - 1)^2,流量为1。这样求最小费用流既为答案。

    待续...

  • 相关阅读:
    centos在设置时区
    Qt那点事儿(三) 论父对象与子对象的关系
    Qt多线程应用--QRunnable
    Qt学习之如何启动和终止一个线程
    Qt 互斥量 QMutex
    Qt网络获取本机网络信息
    QT程序拷贝 转移 改变运行环境
    Qt调用dll中的功能函数
    用Qt生成dll类库及调用方法
    Qt DLL总结【二】-创建及调用QT的 DLL
  • 原文地址:https://www.cnblogs.com/lnu161403214/p/9360882.html
Copyright © 2011-2022 走看看