AtCoder Grand Contest 001

比赛链接

A - BBQ Easy

从小到大排序以后,答案就是所有奇数位置之和。

B - Mysterious Light

发现去掉前两次反射以后,剩下的是一个在平行四边形内反射的过程,且形式类似于辗转相除。具体地,

\[F(n,x)=\begin{cases} -n & x=0\\ 2x\lfloor\frac{n}{x}\rfloor+F(x,n\bmod x) & x>0 \end{cases} \]

最后的答案就是 \(F(n-x,x)+n\)

C - Shorten Diameter

直接 DP,设 \(f_{i,j}\) 表示考虑 \(i\) 子树内的一个以 \(i\) 为根的连通块,最大深度不超过 \(j\),且直径不超过 \(K\),的最大点数。合并子树信息是简单的。

D - Arrays and Palindrome

这个题就比较智慧了。

首先,一段长为 \(L\) 的回文串能够贡献 \(\lfloor\frac{L}{2}\rfloor\) 对相等关系。由于相等关系至少需要有 \(n-1\) 对,所以给定的 \(A\) 数组中至多有两个奇数,否则无解。

将这两个奇数放到开头和结尾,并构造 \(B:=[A_1-1,A_2,\dots,A_{M-1},A_M+1]\)。注意特判 \(M=1\)\(A_1=1\) 的情况。

E - BBQ Hard

现在已经成为套路了。

答案就是

\[\sum_{1\le i<j\le N} \binom{A_i+A_j+B_i+B_j}{A_i+A_j}. \]

假如固定 \(i,j\),那么这个组合数可以描述为从 \((-A_i,-B_i)\) 走到 \((A_j,B_j)\),每次只能向上或向右走的方案数。

由于值域很小,所以可以统一进行一次 DP。时间复杂度 \(O(N+V^2)\)

F - Wide Swap

考虑 \(P\) 的逆排列 \(Q=P^{-1}\),在 \(Q\) 上,操作可以描述为每次交换相邻的两个差 \(\ge K\) 的元素。

考虑一对 \(i,j\) 满足 \(i<j\)\(|Q_i-Q_j|<K\),那么 \(Q_i\) 在任意时刻都一定在 \(Q_j\) 前面。并且只要对于任意 \(i,j\) 均满足这个条件,这样的 \(Q\) 就是能得到的。

根据这个条件可以建出一张 DAG,我们需要最小化这个 DAG 的一个拓扑序 \(p\) 的逆 \(p^{-1}\)。根据一个结论:

在一张 DAG 上,一个字典序最大的拓扑序 \(p\),其逆 \(p^{-1}\) 也是字典序最大的。

所以只需要在反图上求最大拓扑序 \(p\),然后 \(\operatorname{reverse}(p^{-1})\) 就是答案。

唯一的问题就是这张图有 \(O(N^2)\) 条边。但这也是容易的:考虑从 \(Q_i\) 连出去的边,也就是所有的 \(j<i\) 满足 \(Q_j\in (Q_i-k,Q_i+k)\)。只需要向其中 \(Q_j<Q_i\) 的最大 \(j\),以及 \(Q_j>Q_i\) 的最大 \(j\) 连边即可。

时间复杂度 \(O(N\log N)\)

相关推荐

  1. 笔记001

    2023-12-12 17:57:03       30 阅读
  2. 笔记001

    2023-12-12 17:57:03       15 阅读
  3. 001 mongodb

    2023-12-12 17:57:03       10 阅读
  4. (051)FPGA时钟--->(001)时钟介绍

    2023-12-12 17:57:03       10 阅读
  5. Python<span style='color:red;'>001</span>

    Python001

    2023-12-12 17:57:03      5 阅读
  6. AtCoder Grand Contest 001

    2023-12-12 17:57:03       56 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-12 17:57:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-12 17:57:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-12 17:57:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-12 17:57:03       18 阅读

热门阅读

  1. TCP和UDP的区别

    2023-12-12 17:57:03       36 阅读
  2. Git合并代码(rebase)

    2023-12-12 17:57:03       39 阅读
  3. android重启app

    2023-12-12 17:57:03       42 阅读
  4. Python——第五章:json模块

    2023-12-12 17:57:03       42 阅读
  5. 12月10号总结

    2023-12-12 17:57:03       42 阅读
  6. Nginx——记录post请求回执405的一种解决方式

    2023-12-12 17:57:03       50 阅读
  7. 代码编译出错可能的原因

    2023-12-12 17:57:03       65 阅读
  8. OOP

    2023-12-12 17:57:03       54 阅读
  9. 02-python基础学习

    2023-12-12 17:57:03       39 阅读
  10. 【docker】根据docker inspect获取启动参数

    2023-12-12 17:57:03       40 阅读
  11. JVM调优

    JVM调优

    2023-12-12 17:57:03      41 阅读
  12. Go 语言区块链测试实践指南(一):GO单元测试

    2023-12-12 17:57:03       40 阅读
  13. 2023年的PHP项目部署笔记。什么?还有人用PHP?

    2023-12-12 17:57:03       39 阅读