T1.

显然往 \(x < 0, y < 0\) 的点走一定不优。

根据转移式可发现 \(C(x, y)\) 即从 \((0, 0)\) 走到 \((x, y)\) 的方案数 \(\dbinom {x + y} {x}\)。

那么兜一个圈圈再回到目的地显然没有直接往目的地走优。

于是我们可以强化限制:每一步只能向右或者上走。

设 \(f_{i, j}\) 表示走到 \((i, j)\) 的体力的最小花费,则有 \(f(i, j) = \min \{f(i - 1, j), f(i, j - 1)\} + \dbinom {i + j} {j}\)。

其中 \(0 \leq i \leq n, 0 \leq j \leq m\),且 \(f(i, 0) = i, f(0, j) = j\)。

从 \((n, m)\) 点往前倒推转移过程,不难发现走 \((0, 0) \to (0, m) \to (n, m)\) 或者 \((0, 0) \to (n, 0) \to (n, m)\) 一定最短。更确切的:

  • 若 \(n = \max \{n, m\},m = \min \{n, m\}\),则 \((0, 0) \to (n, 0) \to (n, m)\) 最短。
  • 若 \(m = \max \{n, m\},n = \min \{n, m\}\),则 \((0, 0) \to (0, m) \to (n, m)\) 最短。

考虑直接写出最后答案的柿子,以第一种情况为例。

容易得出 \(\mathbb{Ans} = n + 1 + {\large \sum \limits _{i = 1}^{m}} \dbinom {n + i} {n}\)。

可化为 \(n + 1 + {\large \sum \limits _{i = n + 1}^{m + n}} \dbinom {i} {n} = n + 1 + {\large \sum \limits _{i = 0}^{m + n}} \dbinom {i} {n} - {\large \sum \limits _{i = 0}^{n}} \dbinom {i} {n}\)。

前面一个和式使用变上项求和公式,后一个本来就等于 \(0\),故有:\(\mathbb{Ans} = n + 1 + \dbinom {m + n + 1} {n + 1}\)。

\(m, n\) 很大,但 \(mn \leq 10^{12}\),故考虑利用 \(\dbinom {m + n + 1} {n + 1} = \dbinom {m + n + 1} {m}\),调整计算过程,大力算即可,大概是根号级别的。


T2.

把题目在手上 Rua 一 Rua,你会发现它就是一个有可重复元素的康拓展开(本质上就是一堆 \([0, 9]\) 的数,可重,在全排列中有多少的排列的字典序小于给定排列)。

那就像康托展开一样去玩它。

设原数,即原序列为 \(A\),长度为 \(n\)。对于第 \(i\) 个位置考虑对实际填数方案分类。

  • \(i\) 之前的数均与 \(A\) 中对应元素相等,且 \(i\) 上填比 \(A_i\) 小的数。那么 \(i\) 以后的就是没用过的数的排列个数,注意是可重排列。
  • \(i\) 及以前的数均与 \(A\) 中对应元素相等。标记当前元素被用过直接往后继续算即可。

仅有以上两种情况,给个部分代码供参考。

for(int i = 1; i <= len; i++) {
for(int j = 0; j < (s[i] - '0'); j++)
if(cnt[j]) {
cnt[j]--;
ans += calc(len - i); // 可重排列
cnt[j]++;
}
cnt[s[i] - '0']--;
}

然后考虑处理这个可重排列。

设需要排列的可重集为 \(B = \{B_1 \times n_1, B_2 \times n_2 , \dots , B_k \times n_k\}\),表示 \(B_i\) 有 \(n_i\) 个。

朴素的排列计算方式为:\(\dfrac {S!} {\prod \limits_{i = 1}^{k}(n_i!)}\),其中 \(S = {\large \sum \limits _{i = 1}^k} n_i\)。

但此题无取模,这样算会炸,考虑换一个方案,我们可以将 \(B_1\) 到 \(B_k\) 按顺序分配到 \(n\) 个位置上。

则排列数可化为:\({\large \sum \limits _{i = 1} ^{k}} \dbinom {n - \mathrm{Pre}(i)} {n_i}\),当中 \(\mathrm{Pre}(i) = {\large \sum \limits _{j = 1} ^{i}} n_j\)。

这样就可以杨辉三角预处理,然后再做了。


T3.

简单容斥。

抬手先判一个若 \((n - 1) \times m < k\),则无解。

接下来发现,如果没有 \([0, n)\) 的限制,利用插板法可答案为 \(\dbinom {m + k - 1} {m - 1}\)。显然这里面会有单个元素超过 \(n - 1\) 的分配方案,考虑去除掉它们。

设至少有 \(x\) 个元素超过了 \(n - 1\) 的方案数为 \(f(x)\),发现 \(f(x) = \dbinom {m} {i} \times \dbinom {m + k - x \times n - 1} {m - 1}\)。

即将这 \(x\) 个元素先每一个都分配 \(n\),在把剩下的分配随便分配的方案数,注意每个元素是不同的,需要考虑顺序。

接下来就容斥呗。可知 \(\mathbb{Ans} = {\large \sum \limits _{i = 0}^{m}f(i) \times k(i)}\),其中 \(k(i) = \left \{ \begin{matrix} -1, x\equiv 1 \pmod 2 \\ 1, x \equiv 0\pmod 2 \end{matrix} \right.\)。


T4.

为什么要难度降序啊。

设至少有 \(x\) 个爱好相同的人的对数为 \(f(x)\)。

则 \(\mathbb{Ans} = {\large \sum \limits _{i = 0}^{5}f(i) \times k(i)}\),其中 \(k(i) = \left \{ \begin{matrix} -1, x\equiv 1 \pmod 2 \\ 1, x \equiv 0\pmod 2 \end{matrix} \right.\)。

\(f(x)\) 可以直接 Trie 或者 Hash + map 统计出来嘛。

就是说,你用 \(O(2^5)\) 对于每一个人去枚举至少那些爱好属于相同的,然后分开计算贡献。


Conclusion.

首先死在了难度降序。

然后死在了 T1 降智打了 Lucas。

接着死在了 T2 对康拓展开毫无印象。

又死在了 T3 手推降智 \(O(nm)\) 容斥。

最后死在了 T4 的失智。

综合来讲,死在了对题目 Trick 的极低的敏感度。

Solution -「2021.11.27」\Infty的更多相关文章

  1. Solution -「多校联训」朝鲜时蔬

    \(\mathcal{Description}\)   Link.   破案了,朝鲜时蔬 = 超现实树!(指写得像那什么一样的题面.   对于整数集 \(X\),定义其 好子集 为满足 \(Y\sub ...

  2. Solution -「多校联训」假人

    \(\mathcal{Description}\)   Link.   一种物品有 长度 和 权值 两种属性,现给定 \(n\) 组物品,第 \(i\) 组有 \(k_i\) 个,分别为 \((1,a ...

  3. Solution -「多校联训」查拉图斯特拉如是说

    \(\mathcal{Description}\)   Link.   给定 \(n\) 和 \(m\) 次多项式 \(f(x)\),求 \[\sum_{i=0}^n\binom{n}{i}f(i)\ ...

  4. Solution -「洛谷 P6021」洪水

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的带点权树,删除 \(u\) 点的代价是该点点权 \(a_u\).\(m\) 次操作: 修改单点点权. ...

  5. Solution -「洛谷 P4719」「模板」"动态 DP" & 动态树分治

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个结点的带权树,\(m\) 次单点点权修改,求出每次修改后的带权最大独立集.   \(n,m\le10^5 ...

  6. Solution -「集训队作业 2013」「洛谷 P4841」城市规划

    \(\mathcal{Description}\)   link.   求 \(n\) 个结点的简单无向连通图个数,对 \(1004535809~(479\times2^{21}+1)\) 取模.   ...

  7. Solution -「洛谷 P5827」边双连通图计数

    \(\mathcal{Description}\)   link.   求包含 \(n\) 个点的边双连通图的个数.   \(n\le10^5\). \(\mathcal{Solution}\)    ...

  8. Solution -「洛谷 P5827」点双连通图计数

    \(\mathcal{Description}\)   link.   求有 \(n\) 个结点的点双连通图的个数,对 \(998244353\) 取模.   \(n\le10^5\). \(\mat ...

  9. Solution -「洛谷 P4389」付公主的背包

    \(\mathcal{Description}\)   Link.   容量为 \(n\),\(m\) 种物品的无限背包,求凑出每种容量的方案数,对 \(998244353\) 取模.   \(n,m ...

随机推荐

  1. Java 18 新增@snipppet标签,注释中写样例代码更舒适了!

    在这次的Java 18中,新增了一个@snipppet标签,主要用于JavaDoc中需要放示例代码的场景.其实在Java 18之前,已经有一个@code标签,可以用于在JavaDoc中编写小段的代码内 ...

  2. 有了 Promise 和 then,为什么还要使用 async?

    有了 Promise 和 then,为什么还要使用 async? 本文写于 2020 年 5 月 13 日 最近代码写着写着,我突然意识到一个问题--我们既然已经有了 Promise 和 then,为 ...

  3. 常见排序算法的golang 实现

    五种基础排序算法对比 五种基础排序算法对比 1:冒泡排序 算法描述 比较相邻的元素.如果第一个比第二个大,就交换它们两个: 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素 ...

  4. 基于.NetCore开发博客项目 StarBlog - (7) 页面开发之文章详情页面

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...

  5. linux篇-linux修改网卡名(亲测有效)

    1查看网卡ip addr 2cd /etc/sysconfig/network-scripts Ls查看 3mv ifcfg-eno16777736 ifcfg-eth0重命名,然后编辑 最后一行加入 ...

  6. 选择ERP频频踩雷?国内外ERP有差异,突破ERP软件单一性是关键

    信息化日新月异的蓬勃发展,导致企业在选择ERP软件时频频踩雷.企业如何选择出一个适合自己的ERP软件系统呢?是选择国外知名公司的ERP软件产品,还是选择国内性价比高的ERP软件产品呢,小编就带大家了解 ...

  7. 看看CabloyJS工作流引擎是如何实现Activiti边界事件的

    CabloyJS内置工作流引擎的基本介绍 1. 由来 众所周知,NodeJS作为后端开发语言和运行环境,支持高并发.开发效率高,有口皆碑,但是大多用于数据CRUD管理.中间层聚合和中间层代理等工具场景 ...

  8. NPM Error:gyp: No Xcode or CLT version detected!

    问题 最近在macOS Catalina中使用npm安装模块,经常会出现如下错误: > node-gyp rebuild No receipt for 'com.apple.pkg.CLTool ...

  9. 2021.06.12【NOIP提高B组】模拟 总结

    T1 题目大意:有 \(n\) 个点,到点 \(i\) 可以获得 \(A_i\) ,同时消耗 \(B_i\) 若当前价值小于 \(B_i\) 则不能到,问从 \(P\) 开始,任一点结束后的最大值. ...

  10. SpringBoot整合RabbitMQ实战附加死信交换机

    前言 使用springboot,实现以下功能,有两个队列1.2,往里面发送消息,如果处理失败发生异常,可以重试3次,重试3次均失败,那么就将消息发送到死信队列进行统一处理,例如记录数据库.报警等 环境 ...