[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+b_j}{a_i+a_j}\)。
试题分析
显然,后面的式子是一个\(\binom{n+m}{m}\)的形式,也就是我们从位置\((-a_i,-b_i)\)走到位置\((a_j,b_j)\)。
那么我们把式子转化成:$$\frac{\sum_{i=1}^n \sum_{j=1}^n \binom {a_i+b_i+a_j+b_j} {a_i+a_j} - \sum_{i=1}^n \binom{a_i+b_i+a_i+b_i}{a_i+b_i} }{2}$$
然后前面的可以直接dp,后面的直接算就好了。
#include<iostream>
#include<cstring>
#include<vector>
#include<queue>
#include<cstdio>
#include<algorithm>
using namespace std;
#define LL long long
inline int read(){
int x=0,f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) x=x*10+c-'0';
return x*f;
}
const int INF=9999999;
const int MAXN=300010;
const int MAXM=2010;
const int Mod = 1e9+7;
int N; int a[MAXN+1],b[MAXN+1];
int f[MAXM*2+1][MAXM*2+1];
LL ifac[MAXN+1],fac[MAXN+1],inv[MAXN+1];
int A[MAXN+1],B[MAXN+1];
inline LL C(LL n,LL m){
if(n<m) return 0; if(n==m||!m) return 1;
return fac[n]*ifac[m]%Mod*ifac[n-m]%Mod;
}
int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
N=read(); fac[0]=1; inv[1]=1; ifac[1]=ifac[0]=1; LL ans=0;
for(int i=1;i<=(MAXM<<2)+100;i++) fac[i]=fac[i-1]*i%Mod;
for(int i=2;i<=(MAXM<<2)+100;i++){
inv[i]=(Mod-(Mod/i))*inv[Mod%i]%Mod;
ifac[i]=ifac[i-1]*inv[i]%Mod;
}
for(int i=1;i<=N;i++){
A[i]=read(),B[i]=read();
f[MAXM-A[i]][MAXM-B[i]]++;
ans=(ans-C(A[i]*2+B[i]*2,A[i]*2)%Mod+Mod)%Mod;
}
for(int i=1;i<=MAXM*2;i++){
for(int j=1;j<=MAXM*2;j++){
(f[i][j]+=f[i-1][j])%=Mod;
(f[i][j]+=f[i][j-1])%=Mod;
}
}
for(int i=1;i<=N;i++){
(ans+=f[A[i]+MAXM][B[i]+MAXM])%=Mod;
} printf("%lld\n",ans*inv[2]%Mod);
return 0;
}
[Agc001E] BBQ Hard的更多相关文章
- AGC001E BBQ Hard 组合、递推
传送门 题意:给出长度为$N$的两个正整数序列$A_i,B_i$,求$\sum\limits_{i=1}^N \sum\limits_{j=i+1}^N C_{A_i+A_j+B_i+B_j}^{A_ ...
- [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 ...
- 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 AGC001E BBQ Hard (DP、组合计数)
题目链接: https://atcoder.jp/contests/agc001/tasks/agc001_e 题解: 求\(\sum^n_{i=1}\sum^n_{j=i+1} {A_i+A_j+B ...
- [AGC001E]BBQ Hard 组合数学
题目描述 Snuke is having another barbeque party. This time, he will make one serving of Skewer Meal. He ...
- NOIp2018模拟赛三十八
爆〇啦~ A题C题不会写,B题头铁写正解: 随手过拍很自信,出分一看挂成零. 若要问我为什么?gtmdsubtask! 神tm就一个subtask要么0分要么100,结果我预处理少了一点当场去世 难受 ...
- (浙江金华)Day 1 组合数计数
目录 Day 1 组合计数 1.组合数 (1).C(n,m) 读作n选m,二项式系数 : (2).n个东西里选m个的方案数 不关心选的顺序: (3).二项式系数--->多项式系数: 2.组合数计 ...
- 【agc001e】BBQ HARD(动态规划)
[agc001e]BBQ HARD(动态规划) 题面 atcoder 洛谷 题解 这些agc都是写的整场的题解,现在还是把其中一些题目单独拿出来发 这题可以说非常妙了. 我们可以把这个值看做在网格图上 ...
- AGC001 E - BBQ Hard 组合数学
题目链接 AGC001 E - BBQ Hard 题解 考虑\(C(n+m,n)\)的组合意义 从\((0,0)\)走到\((n,m)\)的方案数 从\((x,y)\)走到\((x+n,y+m)\)的 ...
随机推荐
- 使用TS+Sequelize实现更简洁的CRUD
如果是经常使用Node来做服务端开发的童鞋,肯定不可避免的会操作数据库,做一些增删改查(CRUD,Create Read Update Delete)的操作,如果是一些简单的操作,类似定时脚本什么的, ...
- CSS line-height应用
一.固定高度的容器,单行文本垂直居中 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf- ...
- 十一、springboot之web开发之Filter
我们常常在项目中会使用filters用于录调用日志.排除有XSS威胁的字符.执行权限验证等等.Spring Boot自动添加了OrderedCharacterEncodingFilter和Hidden ...
- js实现ctrl+v粘贴图片或是截图
浏览器环境:谷歌浏览器 1.ctrl+v粘贴图片都是监听paste时间实现的,复制的数据都存在clipboardData下面,虽然打印显示数据长度为0,但是还是可以获取数据的 2.打印clipboar ...
- elasticsearch5.5
1.不能以root用户运行 groupadd es #增加es组 useradd es -g es -p pwd #增加es用户并附加到es组 chown -R e ...
- (一)问候 Log4j 你好
第一节: Log4j 简介 Log4j -------- log for java(java的日志) 是java主流的日志框架,提供各种类型,各种存储,各种格式,多样化的日志服务: 在爬虫领域,主要用 ...
- MySQL学习笔记:调用存储过程或函数报1418错误
问题 MySQL开启bin-log后,调用存储过程或者函数以及触发器时,会出现错误号为1418的错误: ERROR 1418 (HY000): This function has none of DE ...
- 《HBase实战》学习笔记
第二章 入门 HBase写路径: 增加新行和修改已有的行,内部机制是一样的. 写入的时候,会写到预写日志(WAL)和MemStore中. MenmStore是内存里的写入缓冲区.填满后,会将数据刷写 ...
- #NodeJS 服务器基本模板
基本server配置 cookie / session / get数据 / post数据 / 请求方法 const express=require('express'); const static=r ...
- Smart Pointer 智能指针
P76 参考:http://www.cnblogs.com/lanxuezaipiao/p/4132096.html http://blog.csdn.net/hackbuteer1/article/ ...