前言

建议大家看一下我对于 D1 的题解(传送门)后再看本题解,本题解是基于那篇题解的基础上书写的。

数学符号约定

\(\dbinom{n}{m}\):表示 \(n\) 选 \(m\) 。

如非特殊说明,将会按照上述约定书写符号。

题目分析

首先引用一下 D1 的答案:\(\displaystyle\sum_{i=1}^n\displaystyle\sum_{j=0}^n j\dbinom {s_2}{j-s_1} \dbinom{s_4}{j-s_3}\)

我相信你已经看我我关于 D1 的题解了,现在考虑对那个做法进行优化。

观察一下,发现里面的和式看起来比较好欺负一点,于是考虑优化 \(\displaystyle\sum_{j=0}^n j\dbinom {s_2}{j-s_1} \dbinom{s_4}{j-s_3}\)。

我们先拆一下:

\[\begin{aligned}
&\sum_{j=0}^{n} j\dbinom {s_2}{j-s_1} \dbinom{s_4}{j-s_3}\\
=&\sum_{j=0}^{n} (j-s_1+s_1) \dbinom {s_2}{j-s_1} \dbinom{s_4}{j-s_3}\\
=&\sum_{j=0}^{n} (j-s_1) \dbinom {s_2}{j-s_1} \dbinom{s_4}{j-s_3} + \sum_{j=0}^{n} s_1 \dbinom {s_2}{j-s_1} \dbinom{s_4}{j-s_3}\\
=&\sum_{j=0}^{n} (j-s_1) \dbinom {s_2}{j-s_1} \dbinom{s_4}{j-s_3} + s_1\sum_{j=0}^{n} \dbinom {s_2}{j-s_1} \dbinom{s_4}{j-s_3}
\end{aligned}
\]

考虑前面的:

\[\begin{aligned}
&\sum_{j=0}^{n} (j-s_1) \dbinom {s_2}{j-s_1} \dbinom{s_4}{j-s_3}\\
=&\sum_{j=0}^{n} (j-s_1) \frac {s_2}{j-s_1} \dbinom {s_2-1}{j-s_1-1} \dbinom{s_4}{j-s_3}\\
=&s_2 \sum_{j=0}^{n} \dbinom {s_2-1}{j-s_1-1} \dbinom{s_4}{s_4+s_3-j}\\
\end{aligned}
\]

考虑一下 \(\displaystyle\sum_{j=0}^{n} \dbinom {s_2-1}{j-s_1-1} \dbinom{s_4}{s_4+s_3-j}\) 的组合意义(其实就是范德蒙德卷积),可以得出:

\[\sum_{j=0}^{n} \dbinom {s_2-1}{j-s_1-1} \dbinom{s_4}{s_4+s_3-j} = \dbinom{s_2+s_4-1}{s_4-s_1+s_3-1}
\]

于是原式变成:

\[s_2\dbinom{s_2+s_4-1}{s_4-s_1+s_3-1}
\]

现在再考虑后面的:

\[\begin{aligned}
&s_1\sum_{j=0}^{n} \dbinom {s_2}{j-s_1} \dbinom{s_4}{j-s_3}\\
=&s_1\sum_{j=0}^{n} \dbinom {s_2}{j-s_1} \dbinom{s_4}{s_4+s_3-j}\\
=&s_1\dbinom{s_2+s_4}{s_4+s_3-s_1}
\end{aligned}
\]

故最后答案变成:

\[\sum_{i=1}^n\sum_{j=0}^n j\dbinom {s_2}{j-s_1} \dbinom{s_4}{j-s_3} = \sum_{i=1}^n s_2\dbinom{s_2+s_4-1}{s_4-s_1+s_3-1}+s_1\dbinom{s_2+s_4}{s_4+s_3-s_1}
\]

发现可以 \(\mathcal O (n)\) 求解。

注意事项参见 D1 的题解。

代码实现

这里给出了关键部分的代码实现,其余部分还恳请读者自己完成:

// sum1 表示 `(` 数量的前缀和
// sum2 表示 `)` 数量的前缀和
// sum3 表示 `?` 数量的前缀和
int ans = 0;
for (int i = 1; i <= n; i++) {
int s1 = sum1[i];
int s2 = sum3[i];
int s3 = sum2[n] - sum2[i];
int s4 = sum3[n] - sum3[i];
ans = add(ans, mul(s1, C(s2 + s4, s4 + s3 - s1)));
ans = add(ans, mul(s2, C(s2 + s4 - 1, s4 + s3 - s1 - 1)));
}
cout << ans << endl;

题解 CF1264D2的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

  10. JSOI2016R3 瞎BB题解

    题意请看absi大爷的blog http://absi2011.is-programmer.com/posts/200920.html http://absi2011.is-programmer.co ...

随机推荐

  1. KVM 虚拟机 热插拔硬盘

    新建硬盘 lvm 命令 lvcreate -L 200G -n lv02 ssd01 qemu-img 命令 qemu-img create -f raw test1G.raw 1G dd 命令 dd ...

  2. study the docker network of macvlan

    Introduce: 在 Macvlan 出现之前,我们只能为一块以太网卡添加多个 IP 地址,却不能添加多个 MAC 地址,因为 MAC 地址正是通过其全球唯一性来标识一块以太网卡的,即便你使用了创 ...

  3. radware 相关(alteon产品)

    目录 术语 组网 配置思路 IP 规划 负载均衡器的IP规划 服务器的IP规划 登陆设备 简单命令行配置 Main Menu 管理IP 确认设备版本 telnet/sshd/http enable 网 ...

  4. Go语言中指针详解

    指针在 Go 语言中是一个重要的特性,它允许你引用和操作变量的内存地址.下面是指针的主要作用和相关示例代码: 1. 引用传递 在 Go 中,所有的变量传递都是值传递,即复制变量的值.如果你想在一个函数 ...

  5. docker service 与 docker stack

    转载请注明出处: 1. Docker Service Docker Service(服务)是用于定义和管理单个容器服务的概念.它是在Docker Swarm集群中运行的容器实例,可以使用docker ...

  6. 使用C++界面框架ImGUI开发一个简单程序

    目录 简介 使用示例 下载示例 main文件 设置ImGui风格 设置字体 主循环 添加Application类 中文编码问题 界面设计 关于imgui_demo.cpp 创建停靠空间 创建页面 隐藏 ...

  7. IDEA使用@Autowired注解为什么会提示不建议?

    ​在使用IDEA编写Spring相关的项目时,当在字段上使用@Autowired注解时,总会出现一个波浪线提示:"Field injection is not recommended.&qu ...

  8. 知识图谱(Knowledge Graph)- Neo4j 5.10.0 使用 - Python 操作

    数据基于: 知识图谱(Knowledge Graph)- Neo4j 5.10.0 使用 - CQL - 太极拳传承谱系表 这是一个非常简单的web应用程序,它使用我们的Movie图形数据集来提供列表 ...

  9. python flask 提供web的get/post开发

    转载请注明出处: 使用python flask框架编写web api中的get与post接口,代码编写与调试示例如下: from flask import Flask, request, jsonif ...

  10. mysql关键字匹配度模糊查询

    有时候项目中需要进行模糊查询,但是要对查询出来的结果进行匹配度排序,比如搜索关键字是"北",需要把数据库中第一个字是北的排在前面,此时就可以用mysql的INSTR函数. INST ...