CF1815

Div. 1 确实难,Virtual Contest 上只完成了两道题,想出来了三道题。

A. Ian and Array Sorting

秒切题……考虑将前 \(n - 1\) 个数变成一样的一个数 \(x\)。显然可以完成。

然而考虑此时最后一个数。如果 \(\ge x\),那么是 \(\texttt{\colorbox{#52C41A}{\textcolor{white}{AC}}}\),如果 \(\lt x\),要分类讨论:

  • 如果前面有奇数个,是 \(\texttt{\colorbox{#E74C3C}{\textcolor{white}{WA}}}\)。

  • 反之,则是 \(\texttt{\colorbox{#52C41A}{\textcolor{white}{AC}}}\)。

提交:Submission #211291004 - Codeforces

B. Sum Graph

傻逼交互。

好呀好呀,傻逼交互体。想出来了思路,但是就是没有写出来。

考虑 + 点 \(n + 1, n + 2\)。那么整个图会形成一条链。

static int perm[N]; int l = 1, r = n;
for (int i = 1; i <= n; ++i) {
perm[i] = (i & 1) ? l++ : r--;
}

于是我们可以在 \(n - 1\) 次以内找到链的一端,然后就可以再来 \(n - 1\) 次找到可能的排列。

由于我们可能是找到的两端,所以有两种排列方法。

输出即可。

提交:Submission #211296415 - Codeforces

进阶:参考 https://codeforces.com/blog/entry/114847?#comment-1021812 以及 Editorial of Codeforces Round #865 - Codeforces,可以把次数减少到 \(n + \lfloor \frac n2 \rfloor + 2\) 次询问。

C. Between

构造好题。

考虑包含可以形成依赖。

于是可以形成一张图。

我们从 1 开始 BFS 对其分层,可以发现,第 \(i\) 层最多可以放 \(i\) 个(包含依赖多套一个)。

那么考虑如何构造合法方案。

我的方法是每一次,按照 BFS 逆序遍历很多遍,每一次遍历到,如果还有没放的则放一个,否则略过。(好像官方题解就是这样?看不懂)

考虑正确性:按照逆序遍历保证出现次数少的在中间,保证不同层之间的依赖关系;每次放一个保证出现次数相同的交替出现,这样就保证了层内的依赖关系无论如何一定满足(互相依赖也没关系)。

提交:Submission #211298131 - Codeforces

D. XOR Counting

打表好题。

在 \(m = 1\) 的时候答案就是 \(n\)。

在 \(m \gt 3\) 的时候小小打表,可以发现答案为 \(\lceil \frac n2 \rceil \times (\lfloor \frac n2 \rfloor + 1)\)。

证明:在 \(m \gt 3\) 的时候,\([x, \frac {n-x}2, \frac {n-x}2, 0, 0, \dots]\) 可以恰好凑出 \(x\),所以所有与 \(n\) 奇偶性相同的 \(x\)(此时 \(n-x\) 为偶数,\(\frac {n-x}2\) 为整数)都可以被凑出。

然后我们发现,加法和异或得到的奇偶性是一样的,并且有 \(a \otimes b \le a + b\),意味着我们只能凑 \(\le n\) 并且与 \(n\) 奇偶性相同的数。

综合两条,我们便可以得出,所有可能凑出的数就是 \(\le n\) 且与 \(n\) 奇偶性相同的数。

推一下公式就是上面的了。

于是问题就只剩下了 \(m = 2\) 的时候。

我们考虑一个 DP,我们记 \(f(n)\) 表示所有可能的异或和的和,\(g(n)\) 表示可能的个数。然后稍微分类讨论一下:

  • 如果 \(n\) 是奇数,我们不妨假设 \(n = a_1 + a_2\),其中 \(a_1\) 为偶数,\(a_2\) 为奇数。设 \(a_1' = \frac {a_1}2, a_2' = \frac {a_2 - 1}2\)。我们可以看出:\(a_1' + a_2' = \frac {n-1}2\) 以及 \(a_1 \otimes a_2 = 2 \times (a_1' \otimes a_2')+1\)。此时个数不会变,而和变为原本的两倍再加上个数。也就是 \(g(n) = g(\frac {n-1}2)\) 以及 \(f(n) = 2f(\frac {n-1}2) + g(\frac {n-1}2)\)。

  • 如果 \(n\) 是偶数,那么我们又要分两类讨论:

    • 设 \(n = a_1 + a_2\),其中两者都是偶数,那么类似的,\(a_1' + a_2' = \frac n2\),\(a_1 \otimes a_2 = 2 \times (a_1' \otimes a_2')\)。

    • 如果都是奇数,有 \(a_1' + a_2' = \frac n2 - 1\) 以及 \(a_1 \otimes a_2 = 2 \times (a_1' \otimes a_2')\)。

    • 因此,我们可以知道 \(f(n) = 2 \times f(\frac n2) + 2 \times f(\frac n2 - 1)\),以及 \(g(n) = g(\frac n2) + g(\frac n2 - 1)\)。

FAKE: 于是我们可以得出递推复杂度 \(T(n) = T(\frac n2) + 1\),得出为 \(O(\log n)\)。

依据SMB,复杂度似乎不是这样的,但是题解是这么给的,或许是有一些神秘的分析,或者是加了记忆化,所以复杂度是这样的。

其实完全可以用记忆化……快一点吧。

提交:https://codeforces.com/contest/1815/submission/211297560

E. Bosco and Particle

性质好题。

性质:

  1. 循环多次 \(=\) 循环一次

  2. 设 \(a_i\) 表示实际上从上面进入这个序列的次数,\(b_i\) 表示实际上向下面出去这个序列的次数。我们把第 \(i\) 个序列单独提出来,类似的定义 \(a_i'\) 和 \(b_i'\)。可以发现,\(\exist k \implies a_i = ka_i', b_i = kb_i'\),也就是有 \(\frac {a_i}{b_i} = \frac {a_i'}{b_i'}\)

  3. 有 \(a_i = b_{i-1}\)。

  4. 令 \(f_i = a_{i + 1}\),\(f_0 = a_1\),于是有 \(f_k = \prod_{i = 1}^k \frac {b_i}{a_i} f_0\)。

  5. 需要保证 \(\forall k\),$ f_k$ 为整数。

于是就可以写出来啦!!!(不是

提交:Submission #211323975 - Codeforces

竟然比 C++ 快,不可思议

随机推荐

  1. 我,PolarDB云原生数据库,5年来实现这些重磅技术创新

    简介: 过去5年,阿里云针对PolarDB进行了诸多创新,通过采用存储计算分离.软硬一体化设计,PolarDB实现成本仅为传统商业数据库的十分之一.所实现的计算.内存与存储资源的"三层解耦& ...

  2. 你的 Sleep 服务会梦到服务网格外的 bookinfo 吗

    简介: ASM 产品是基于社区 Istio 定制实现的,在托管的控制面侧提供了用于支撑精细化的流量管理和安全管理的组件能力.通过托管模式,解耦了 Istio 组件与所管理的 K8s 集群的生命周期管理 ...

  3. 带你体验云原生场景下 Serverless 应用编程模型

    ​简介: 阿里云 Knative 基于 ASK 之上,在完全兼容社区 Knaitve 的同时对 FC.ECI 工作负载进行统一应用编排,支持事件驱动.自动弹性,为您提供统一的 Serverless 应 ...

  4. 京东:Flink SQL 优化实战

    简介: 本文着重从 shuffle.join 方式的选择.对象重用.UDF 重用等方面介绍了京东在 Flink SQL 任务方面做的优化措施. 本文作者为京东算法服务部的张颖和段学浩,并由 Apach ...

  5. [FAQ] Pytorch PytorchStreamReader failed reading zip archive

    比如:rm -rf ~/.cache/huggingface Tool:ChatAI Link:https://www.cnblogs.com/farwish/p/17290240.html

  6. WPF 使用 Silk 的 Direct2D 入门

    在上一篇博客的基础上,使用 dotnet 基金会新开源的 Silk.NET 库,让 Silk.NET 创建的 DX 设备和 WPF 对接渲染.接下来本文将告诉大家如何使用 Silk.NET 提供的 D ...

  7. webapp监听手机物理返回键,返回上一页面或者关闭app

    网上抄的做笔记: 1.项目下建文件夹commonFunction->physicBackListener.js 2.这个js文件内复制代码: document.addEventListener( ...

  8. LLaMA 3 源码解读-大语言模型5

    本来不是很想写这一篇,因为网上的文章真的烂大街了,我写的真的很有可能没别人写得好.但是想了想,创建这个博客就是想通过对外输出知识的方式来提高自身水平,而不是说我每篇都能写得有多好多好然后吸引别人来看. ...

  9. Linux — 进程管理

    进程创建 进程通过fork()创建的大致过程: #include <stdio.h> #include <stdlib.h> #include <sys/types.h& ...

  10. vue特殊attribute-key

    官方说明:如果不使用 key,Vue 会使用一种最大限度减少动态元素并且尽可能的尝试就地复用相同类型元素的算法.而使用 key 时,它会基于 key 的变化重新排列元素顺序,并且会移除 key 不存在 ...