• codeforces 练习


    codeforces 627 D. Preorder Test

    二分 + 树dp

    做logn次树dp

    codeforces 578D.LCS Again

    给出一个字符串str,长度n<=10^6,由m种字符组成,问有多少个长度为n,与str的LCS 为 n-1的字符串t

    这道题可以用dp套dp,但是我不会阿

    可以找规律统计,考虑:

    1.取哪个位置

    2.放在哪个位置

    3.放什么字符

    可以知道,如果str分成了block份,每一份的字符相同,则

    ans = block * n * (m - 1)

    但是这样是会有一些重复计算的

    这种情况会重复计算abababab这样交叉的部分

    减去多计算的部分就可以了

    codeforces 626 E. Simple Skewness

    给出一个数组,从中取若干个数,使得新数组的平均数 - 中位数 最大

    可以证明,取的一定是奇数个数

    如果取了偶数个数,把最中间2个数较大的一个数去掉,情况不会变差,列个式子算一下就可以证明了。

    所以奇数个数,我们就可以枚举中位数

    确定了中位数后,

    每次从小的数中拿x个,大的数拿x个,ans是关于x的函数,而且是先增大再减小的

    就可以三分出此时最优的长度x

    看了Mektpoy的代码,学到了三分的更好的姿势:

     1      int l = 1,r = min(i-1,n-i);
     2         while(r - l > 2){
     3             int mid1 = l + (r - l) / 3;
     4             int mid2 = r - (r - l) / 3;
     5             if(check(i,mid1) < check(i,mid2)) 
     6                 l = mid1;
     7             else
     8                 r = mid2;
     9         }
    10         check(i,l);
    11         check(i,r);
    12         if(l + 1 < r) 
    13             check(i,l+1);

    注意这里跳出循环后,可以是:

    r - l = 1 

    r - l = 2  这个时候还需要check(l + 1)

    r - l = 0 ???

    所以需要check:l,r,l+1(l + 1 < r的情况下)

    codeforces 600 E. Lomsat gelral

    每一个节点建一棵平衡树,启发式合并,O(nlognlogn)

    codeforces 117B Very Interesting Game

    暴力

    codeforces C. Mike and Foam

    莫比乌斯 O(nsqrt(n))

    codeforces 449 C. Jzzhu and Apples

    贪心

    487C. Prefix Product Sequence

    构造

    a[1] = 1,a[n] = n,a[i] = i * inv(i - 1)  (2 < i < n)

    222 C. Reducing Fractions

    分解因子

    78 C. Beaver Game

    博弈

    691 F. Couple Cover

    2维暴力统计,但是由于有i * j <= n 这个条件,其实复杂度是

    n / 1 + n / 2 + n / 3 + ... + n / n = O(nlogn)的

    225 E. Unsolvable

    设第i个梅森素数是2 ^ t - 1,答案就是要求2 ^ (t - 1) - 1,t可以oeis查到

    293 C. Cube Problem

    给出n,求方程(a+b+c)^3 = a^3 + b^3 + c^3 + n的(a,b,c)的解数

    分a = b = c,a = b,a != c,a < b < c 3种情况,暴力枚举,检验下就可以了

    594  D REQ

    好题

    离线处理  bit维护前缀积  

  • 相关阅读:
    c++ 设计模式3 (重构技法 Template Method)
    C++ 设计模式2 (面向对象设计原则)
    c++ 设计模式1
    算法总结—二分搜索与旋转排序数组
    c++ 构造函数,拷贝构造函数,析构函数与赋值操作符
    题解 P2330 【[SCOI2005]繁忙的都市】
    题解 CF896C 【Willem, Chtholly and Seniorious】
    题解 P3369 【【模板】普通平衡树】
    题解 CF383C 【Propagating tree】
    题解 P1179 【数字统计】
  • 原文地址:https://www.cnblogs.com/-maybe/p/6128420.html
Copyright © 2020-2023  润新知