CF1815

CF1815

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

A. Ian and Array Sorting

秒切题……考虑将前 n1 个数变成一样的一个数 x。显然可以完成。

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

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

  • 反之,则是 \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--;
}

于是我们可以在 n1 次以内找到链的一端,然后就可以再来 n1 次找到可能的排列。

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

输出即可。

提交:Submission #211296415 - Codeforces

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

C. Between

构造好题

考虑包含可以形成依赖。

于是可以形成一张图。

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

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

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

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

提交:Submission #211298131 - Codeforces

D. XOR Counting

打表好题

m=1 的时候答案就是 n

m>3 的时候小小打表,可以发现答案为 n2×(n2+1)

证明:在 m>3 的时候,[x,nx2,nx2,0,0,] 可以恰好凑出 x,所以所有与 n 奇偶性相同的 x(此时 nx 为偶数,nx2 为整数)都可以被凑出。

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

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

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

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

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

  • 如果 n 是奇数,我们不妨假设 n=a1+a2,其中 a1 为偶数,a2 为奇数。设 a1=a12,a2=a212。我们可以看出:a1+a2=n12 以及 a1a2=2×(a1a2)+1。此时个数不会变,而和变为原本的两倍再加上个数。也就是 g(n)=g(n12) 以及 f(n)=2f(n12)+g(n12)

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

    • n=a1+a2,其中两者都是偶数,那么类似的,a1+a2=n2a1a2=2×(a1a2)

    • 如果都是奇数,有 a1+a2=n21 以及 a1a2=2×(a1a2)

    • 因此,我们可以知道 f(n)=2×f(n2)+2×f(n21),以及 g(n)=g(n2)+g(n21)

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

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

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

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

E. Bosco and Particle

性质好题

性质:

  1. 循环多次 = 循环一次

  2. ai 表示实际上从上面进入这个序列的次数,bi 表示实际上向下面出去这个序列的次数。我们把第 i 个序列单独提出来,类似的定义 aibi。可以发现,kai=kai,bi=kbi,也就是有 aibi=aibi

  3. ai=bi1

  4. fi=ai+1f0=a1,于是有 fk=i=1kbiaif0

  5. 需要保证 kfk 为整数。

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

提交:Submission #211323975 - Codeforces

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

posted @   jeefy  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示