• AtCoder 补题记录


    天坑。

    AGC 057

    C - Increment or Xor

    题意:一个 \(0~2^n-1\) 的排列,每次可以全局 \(+1\)\(\oplus x\),要还原排列。

    从低到高位建 01 Trie,第 \(i\) 个叶子存着值为 \(i\) 的位置。

    考虑两种操作:

    • 操作 A:交换某些深度所有节点的左右儿子(即异或某个数)
    • 操作 B:交换两个同父亲的叶子,同时不改变其他叶子的左右儿子关系(把这个叶子异或上某个数后挪到 \(2^n-1\) 去,然后 \(+1\) 来交换左右叶子)

    操作 A 不会应用在最后一层(可以被 \(+2^{n-1}\) 替代),同时根据 \(i\) 所在位置与 \(i+2^{n-1}\) 所在位置的关系,可以确定每组左右叶子是否交换,即 B 操作已经固定了。

    模拟完 B 操作后,最后再用 \(1\) 次 A 操作即可。

    AGC 001

    E - BBQ Hard

    Xmas 2021

    C - Count Me

    题意:求 01 串序列 \(a_0,a_1,\dots,a_n\),其中 \(a_0\) 为空串,\(a_n\) 需匹配一个给定的模板串(由 01?$ 组成),\(a_i\)\(a_{i-1}\) 的基础上插入 0 或 1,求方案数。

    神题。

    为了避免重复,可以规定只有以下 4 种操作:

    • 开头插入 1
    • 结尾插入 0
    • 把 0 换成 01
    • 把 1 换成 01

    每个间隔插入个板子,共 \(n+1\) 个板子,每个板子打个时间戳 \(t_i\),那么最终 \(a_n\) 中,第 \(i\) 位为 0 代表 \(t_i<t_{i+1}\),为 1 则是大于,? 则随便。

    以 ? 为分隔符,每一段单独算,那么就变成 LOJ 不等关系 了。设 \(f_i\) 表示到 \(i\) 的方案数,那么有:

    \[f_i=\sum_{j=0}^{i-1} \frac{(-1)^{cnt_i-cnt_j}}{(i-j)!} f_j \]

    \(cnt_i\)\(1 \sim i\)\(>\) 个数。最后乘个 \(n!\) 之类的。

    合起来多重集一下就行。可以分治 FFT 优化。时间复杂度 \(O(n\log^2 n)\)

  • 相关阅读:
    C# WPF 窗体传递消息
    WPF ProgressBar 样式
    WPF的TextBox以及PasswordBox显示水印文字
    Win8.1 Hyper-V 共享本机IP上网
    ASP.NET MVC入门-Startup 类:注册服务和使用中间件
    ASP.NET MVC入门-Program类:程序的入口
    Unity3d AssetBundle 资源加载与管理
    C#考核知识点总结
    数据结构与算法之美-字符串匹配(上)
    LeetCode-探索链表-综合问题
  • 原文地址:https://www.cnblogs.com/acceptedzhs/p/atcoder.html
Copyright © 2020-2023  润新知