AT1983 BBQ Hard
洛谷题目链接:BBQ Hard
题意翻译
有 n 个数对 \((A_i; B_i)\),求出 $$\sum_{i=1}^{n}\sum_{j=i + 1}^{n}{a_i+b_i+a_j+b_j \choose a_i+a_j}$$ 答案对1e9+7取模
- \(2≦N≦200,000\)
- \(1≦A_i≦2000,\ 1≦B_i≦2000\)
题解: 考虑\(C_{a_i+b_i}^{b_i}\)的实际意义,实际上它相当于从\((0,0)\)出发,走到\((a_i,b_i)\)的方案数,那么\(C_{a_i+b_i+a_j+b_j}^{a_i+a_j}\)也就相当与从\((0,0)\)出发,走到\((a_i+a_j,b_i+b_j)\)的方案数.
如何统计从\((0,0)\)出发,走到\((a_i+a_j,b_i+b_j)\)的方案数呢?可以用\(f[i][j]\)表示从\((0,0)\)出发,走到\((i,j)\)的方案数,则有\(f[i][j]=f[i-1][j]+f[i][j-1]\)(从左边过来或从下面过来),答案就是\(f[a_i][b_i]\)
考虑将坐标轴平移,将\(C_{a_i+b_i+a_j+b_j}^{a_i+a_j}\)看做从\((-a_i,-b_i)\)走到\((a_j,b_j)\)的方案数.
那么问题来了:为什么不统一从\((0,0)\)出发,而是要将坐标轴平移呢?我们再观察上面的式子,会发现如果统一从\((0,0)\)出发,那么就需要统计\(n^2\)个终点的答案,而在平移坐标轴之后只需要给\(n\)个起点赋初始值,最后统计\(n\)个终点的答案.
但是如果这样计算相当与统计了$$\sum_{i=1}{n}\sum_{j=1}{n}{a_i+b_i+a_j+b_j \choose a_i+a_j}$$
要减去重复的部分,也就是答案相当与:$$\sum_{i=1}^{n}\sum_{j=i + 1}^{n}{a_i+b_i+a_j+b_j \choose a_i+a_j}=\frac{\sum_{i=1}{n}\sum_{j=1}{n}{a_i+b_i+a_j+b_j \choose a_i+a_j}-\sum_{i=1}^n{(a_i+b_i)2 \choose a_i2}}{2}$$
因为从\((-a_i,-b_i)\)到\((a_j,b_j)\)和从\((-a_j,-b_j)\)到\((a_i,b_i)\)的方案是一样的.
因为起点是负数,所以可以给负数加上一个比较大的值使它在数组中下标的位置为正数.
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5+5;
const int BASE = 2002;
const int mod = 1e9+7;
int n, a[N], b[N], ans = 0, f[BASE*2+5][BASE*2+5], inv[N], fac[N], pinv[N];
void init(){
fac[0] = inv[0] = pinv[0] = fac[1] = inv[1] = pinv[1] = 1;
for(int i = 2; i <= BASE*4; i++){
fac[i] = 1ll*fac[i-1]*i%mod;
inv[i] = 1ll*(mod-mod/i)*inv[mod%i]%mod;
pinv[i] = 1ll*pinv[i-1]*inv[i]%mod;
}
}
int C(int n, int m){ return 1ll*fac[n]*pinv[m]%mod*pinv[n-m]%mod; }
int main(){
ios::sync_with_stdio(false);
cin >> n, init();
for(int i = 1; i <= n; i++)
cin >> a[i] >> b[i], f[BASE-a[i]][BASE-b[i]]++;
for(int i = 1; i <= BASE*2; i++)
for(int j = 1; j <= BASE*2; j++)
(f[i][j] += (f[i-1][j]+f[i][j-1])%mod) %= mod;
for(int i = 1; i <= n; i++) (ans += f[a[i]+BASE][b[i]+BASE]) %= mod;
for(int i = 1; i <= n; i++) (ans += mod-C((a[i]+b[i])*2, b[i]*2)) %= mod;
ans = 1ll*ans*inv[2]%mod;
cout << ans << endl;
return 0;
}
AT1983 BBQ Hard的更多相关文章
- 「AT1983 BBQ Hard」
呦,来一次久违的BBQ吧! AT题...日本的题库质量一向很高 这题是有关组合数的DP... 前置芝士 快速计算组合数,具体还是自行百度. 膜域下的除法. 具体做法 题目中的问题: \(\sum_{i ...
- AT1983 BBQ Hard 解题报告
题意 求\(\sum_{i=1}^{n} \sum_{j=i+1}^{n} \dbinom{a_i+a_j}{a_i+b_i+a_j+b_j}\) 解法 考虑\(\dbinom{a_i+a_j}{a_ ...
- AGC001 E - BBQ Hard 组合数学
题目链接 AGC001 E - BBQ Hard 题解 考虑\(C(n+m,n)\)的组合意义 从\((0,0)\)走到\((n,m)\)的方案数 从\((x,y)\)走到\((x+n,y+m)\)的 ...
- AGC01 A - BBQ Easy
目录 题目链接 题解 代码 题目链接 AGC01 A - BBQ Easy 题解 贪心 排序之后从大到小,没两组取小的那个 代码 #include<cstdio> #include< ...
- 【agc001e】BBQ HARD(动态规划)
[agc001e]BBQ HARD(动态规划) 题面 atcoder 洛谷 题解 这些agc都是写的整场的题解,现在还是把其中一些题目单独拿出来发 这题可以说非常妙了. 我们可以把这个值看做在网格图上 ...
- [Agc001E] BBQ Hard
[Agc001E] BBQ Hard 题目大意 给定\(n\)对正整数\(a_i,b_i\),求\(\sum_{i=1}^{n-1} \sum_{j=i+1}^n \binom{a_i+b_i+a_j ...
- ATcoder 1983 BBQ Hard
E - BBQ Hard Time limit : 2sec / Memory limit : 256MB Score : 1400 points Problem Statement Snuke is ...
- AT1983-[AGC001E]BBQ Hard【dp,组合数学】
正题 题目链接:https://www.luogu.com.cn/problem/AT1983 题目大意 给出\(n\)个数对\((a_i,b_i)\) 求 \[\sum_{i=1}^n\sum_{j ...
- [AGC001 E] BBQ Hard
Description 有\(N(N\leq 200000)\)个数对\((a_i,b_i)(a_i,b_i,\leq 2000)\),求出\(\sum\limits_{i=1}^n\sum\limi ...
随机推荐
- Teamwork(The second day of the team)
梦之翼 5.20工作汇报: Master:杨灵超 产品负责人:杨家安 第一次Sprint的目标和时间: 目标:这一次的sprint我们想先做成一个可以运行的可以展示,但是功能或许还不是很完善的一个模型 ...
- week4c:个人博客作业
6.具体程序: #include<stdio.h>#include<stdlib.h>#include<math.h>void Udecide_n();int De ...
- DRBD 实验
跨主机的块设备镜像系统,工作在内核中完成 drbd工作原理:客户端发起一个写操作的系统调用给文件系统,写请求再到达内核缓冲区,最到达DRBD模块,此时drbd会复制写入磁盘的数据,且进行两步操作,第一 ...
- 学术诚信与职业道德——《构建之法》P384~391读后感
程序本身没有伦理和职业道德, 但是程序员和软件企业要有,因为程序员明白伦理道德的存在. 对于刚刚经历被不负责队友抛下的经历,对此很有感触,软件工程师除了遵守任务做事,也要考虑道德上.责任上的事情. 就 ...
- 词频统计(WEB)版
需求: 在以前的基础上把程序迁移到web平台,通过用户上传TXT的方式接收文件. 前端页面代码: <%@ Page Language="C#" AutoEventWireup ...
- [转发]VMware厚置备延迟置零 、 厚置备置零、精简置备 区别
1.厚置备延迟置零(zeroed thick) 以默认的厚格式创建虚拟磁盘.创建过程中为虚拟磁盘分配所需空间.创建时不会擦除物理设备上保留的任何数据,但是以后从虚拟机首次执行写操作时会按需要将其置零. ...
- Alpha 冲刺 —— 十分之五
队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 协助测试的进行 测试项目运行的服务器环境 ...
- adb server version (32) doesn't match this client (36); killing...
http://blog.csdn.net/seaker_/article/details/55107598 FAQ: adb server version (36) doesn't match thi ...
- 解题:USACO10MAR Great Cow Gather
题面 可以水水换根的,不过我是另一种做法:(按点权)找重心,事实上这是重心的一个性质 考虑换根的这个过程,当我们把点放在重心时,我们移动这个点有两种情况: 1.移动到最大的那个子树里 可以发现这个最大 ...
- python函数:基础函数调用整理
声明:以下链接和描述据来自于网络,很多都是来自菜鸟教程 一.字符串 str python字符串格式化符号: %c 格式化字符及其ASCII码 %s 格式化字符串 %d 格式化整数 函数 描述 需要掌 ...