AGC001 E - BBQ Hard [组合数]
这题就是要求
\(\sum_{i=1}^{n} \sum_{j=i+1}^{n} C(a_i+a_j+b_i+b_j,a_i+a_j)\)
考虑搞一搞,\(C(a_i+a_j+b_i+b_j,a_i+a_j)\)的意义等同于从 \((-a_j,-b_j)\) 走到 \((a_i,b_i)\)的方案数
因而 \(其他的走到(a_i,b_i)\)的步数就等于所有的加起来走到\((a_i,b_i)\)
然后就可以了
考虑多余的部分
\(\sum_{i=1}^{n} \sum_{j=i+1}^{n} C(a_i+a_j+b_i+b_j,a_i+a_j)\)
\(=\frac{\sum_{i=1}^{n} \sum_{j=1}^{n} C(a_i+a_j+b_i+b_j,a_i+a_j)-\sum_{i=1}^{n} C(a_i+a_i,b_i+b_i)}{2}\)
逆元搞一搞,没了。
#include<bits/stdc++.h>
using namespace std ;
#define rep(i , j , n) for(register int i = j ; i <= n ; i ++)
#define int long long
int n ;
const int N = 2e5 + 10 ;
int a[N] , b[N] ;
const int S = 2e3 + 1 ;
const int M = 4e3 + 20 ;
int dp[M][M] ;
int fac[S << 2] ;
const int mod = 1e9 + 7 ;
int qpow(int x , int y) {
int ans = 1 ;
for( ; y ; y >>= 1 , x = x * x % mod)
if(y & 1) ans = ans * x % mod ;
return ans ;
}
int inv(int x) {
return qpow(x , mod - 2) ;
}
int C(int x , int y) {
return fac[x] % mod * inv(fac[y]) % mod * inv(fac[x - y]) % mod ;
}
signed main() {
ios :: sync_with_stdio(false) ;
cin.tie(0) ;
cout.tie(0) ;
cin >> n ;
fac[0] = 1 ;
rep(i , 1 , S << 2) fac[i] = fac[i - 1] * i % mod ;
rep(i , 1 , n) cin >> a[i] >> b[i] ;
rep(i , 1 , n) ++ dp[S - a[i]][S - b[i]] ;
rep(i , 1 , S << 1) rep(j , 1 , S << 1) {
dp[i][j] = (dp[i][j] + dp[i][j - 1]) % mod ;
dp[i][j] = (dp[i][j] + dp[i - 1][j]) % mod ;
}
int ans = 0 ;
rep(i , 1 , n) (ans += dp[S + a[i]][S + b[i]]) %= mod ;
rep(i , 1 , n) {
ans = (ans - C(a[i] + b[i] + a[i] + b[i] , a[i] + a[i]) + mod) % mod ;
}
ans = (ans * inv(2)) % mod ;
cout << ans << '\n' ;
return 0 ;
}
AGC001 E - BBQ Hard [组合数]的更多相关文章
- AGC001 E - BBQ Hard 组合数学
题目链接 AGC001 E - BBQ Hard 题解 考虑\(C(n+m,n)\)的组合意义 从\((0,0)\)走到\((n,m)\)的方案数 从\((x,y)\)走到\((x+n,y+m)\)的 ...
- [agc001E]BBQ Hard[组合数性质+dp]
Description 传送门 Solution 题目简化后要求的实际上是$\sum _{i=1}^{n-1}\sum _{j=i+1}^{n}C^{A[i]+A[j]}_{A[i]+A[j]+B[i ...
- AGC001 E - BBQ Hard【dp+组合数学】
首先直接按要求列出式子是\( \sum_{i=1}^{n}\sum_{j=i+1}^{n}C_{a_i+a_j+b_i+b_j}^{a_i+a_j} \) 这样显然过不了,因为ab的数据范围比较小,所 ...
- [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 ...
- 【AtCoder】AGC001
AGC001 A - BBQ Easy 从第\(2n - 1\)个隔一个加一下加到1即可 #include <bits/stdc++.h> #define fi first #define ...
- A*G#C001
AGC001 A BBQ Easy 贪心. https://agc001.contest.atcoder.jp/submissions/7856034 B Mysterious Light 很nb这个 ...
- 【AGC板刷记录】
这个帖子,是在自己学知识点累了的时候就看看\(AGC\)的题目来休息. 而且白天上课可以做( AGC-001 \(A\ BBQ Easy\) 考虑从小到大排,相邻两个取为一对. BBQ Easy #i ...
- agc001E - BBQ Hard(dp 组合数)
题意 题目链接 Sol 非常妙的一道题目. 首先,我们可以把\(C_{a_i + b_i + a_j + b_j}^{a_i + a_j}\)看做从\((-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 ...
随机推荐
- 刚安装了ftp之后无法使用root访问,服务器发回了不可路由的地址。使用服务器地址代替。
真的艰辛,用了整整一个下午加晚上,才把服务器搭建好,中间真的好多坑... 错误1: vsftpd正确配置: vsftpd.conf: pam_service_name=vsftpduserlist_e ...
- 题解 SDOI2010 【栗栗的书架】
\[ Preface \] 看到这题洛谷标签有 主席树 ,还以为是什么二维主席树的玄学做法(雾 \[ Description \] 给出一个 \(R×C\) 的矩阵. 一共 \(m\) 次询问,每次询 ...
- C++:析构函数的调用时机
结论:只有当类的某个实例化对象的构造函数执行完毕,而且当该对象退出作用域时,才会执行析构函数. 如果在执行构造函数的过程中抛出了异常,就不会调用析构函数 上测试代码: class Test { pub ...
- USBWebServer - 在U盘里搭一个Web服务器!
文章选自我的博客:https://blog.ljyngup.com/archives/321.html/ 本文将介绍一款可以在U盘内直接搭建Web服务器的软件 软件可以免安装直接在U盘内运行,适合外出 ...
- JMeter之If Controller深究二
1.背景 接上文JMeter之If Controller深究一,在上文中提到压测采用的是JMeter3.1版本,本篇继续深究.基本确定问题原因后,宝路这边又做了不同版本的JMeter对比实验,这次加入 ...
- VFP调整本机日期时间与服务器日期时间一致
*!*调整本机日期时间与服务器日期时间一致( YYYY-MM-DD HH:MM:SS.FFF )*!*以下cSqlStr及nCon为SQL查询串及连接句柄cSqlStr="Select Sy ...
- Nginx总结(八)启用Nginx Status及状态参数详解
前面讲了如何配置Nginx虚拟主机,大家可以去这里看看nginx系列文章:https://www.cnblogs.com/zhangweizhong/category/1529997.html 今天简 ...
- 1236 - Pairs Forming LCM
1236 - Pairs Forming LCM Find the result of the following code: long long pairsFormLCM( int n ) { ...
- KVM管理工具webvirtmgr的使用
WebVirtMgr的日常配置:添加宿主机,创建虚拟机,磁盘扩容,快照等具体操作记录如下: 一.创建虚拟机 1.创建存储池 点击创建的宿主机,进入虚拟机部署界面 点击“存储池”按钮,创建存储池(即创建 ...
- Leetcode:110. 平衡二叉树
Leetcode:110. 平衡二叉树 Leetcode:110. 平衡二叉树 点链接就能看到原题啦~ 关于AVL的判断函数写法,请跳转:平衡二叉树的判断 废话不说直接上代码吧~主要的解析的都在上面的 ...