BBQ Hard

题解

首先,我们可以考虑组合数是可以被表示成路径的形式的,(n+mm)\binom{n+m}{m}(mn+m​)可以表示从点(0,0)(0,0)(0,0)到点(n,m)(n,m)(n,m)的简单路径(向上走或向右走)数。
那么显然,我们(ai+aj+bi+bjai+aj)\binom{a_i+a_j+b_i+b_j}{a_i+a_j}(ai​+aj​ai​+aj​+bi​+bj​​)可以表示从点(0,0)(0,0)(0,0)到点(ai+aj,bi+bj)(a_i+a_j,b_i+b_j)(ai​+aj​,bi​+bj​)的简单路径数量。但显然

我们不可能对于每个(ai+aj,bi+bj)(a_i+a_j,b_i+b_j)(ai​+aj​,bi​+bj​)都求一条路径,但不妨再观察一下,(0,0)(0,0)(0,0)到(ai+aj,bi+bj)(a_i+a_j,b_i+b_j)(ai​+aj​,bi​+bj​)的路径条数显然是等价于(−ai,−bi)(-a_i,-b_i)(−ai​,−bi​)到(aj,bj)(a_j,b_j)(aj​,bj​)的路径数的。
我们可以用dpdpdp求出所有的(−ai,−bi)(-a_i,-b_i)(−ai​,−bi​)到所有的(aj,bj)(a_j,b_j)(aj​,bj​)的路径数。
记dpx,ydp_{x,y}dpx,y​为所有的(−ai,−bi)(-a_i,-b_i)(−ai​,−bi​)到点(x,y)(x,y)(x,y)的简单路径数,∑j=1ndpai,bi\sum_{j=1}^{n}dp_{a_i,b_i}∑j=1n​dpai​,bi​​就是答案。

时间复杂度O(n+AB)O\left(n+AB\right)O(n+AB)。

源码

#include<bits/stdc++.h>
using namespace std;
#define MAXN 200005
#define MAXM 4005
#define lowbit(x) (x&-x)
#define reg register
#define pb push_back
#define mkpr make_pair
#define fir first
#define sec second
typedef long long LL;
typedef unsigned long long uLL;
typedef long double ld;
typedef pair<int,int> pii;
const int INF=0x3f3f3f3f;
const int mo=1e9+7;
const int mod=1e5+3;
const int inv2=5e8+4;
const int jzm=2333;
const int zero=2000;
const int n1=1000;
const int M=100000;
const int orG=3,ivG=332748118;
const long double Pi=acos(-1.0);
const double eps=1e-12;
template<typename _T>
_T Fabs(_T x){return x<0?-x:x;}
template<typename _T>
void read(_T &x){_T f=1;x=0;char s=getchar();while(s>'9'||s<'0'){if(s=='-')f=-1;s=getchar();}while('0'<=s&&s<='9'){x=(x<<3)+(x<<1)+(s^48);s=getchar();}x*=f;
}
template<typename _T>
void print(_T x){if(x<0){x=(~x)+1;putchar('-');}if(x>9)print(x/10);putchar(x%10+'0');}
int gcd(int a,int b){return !b?a:gcd(b,a%b);}
int add(int x,int y,int p){return x+y<p?x+y:x+y-p;}
void Add(int &x,int y,int p){x=add(x,y,p);}
int qkpow(int a,int s,int p){int t=1;while(s){if(s&1)t=1ll*t*a%p;a=1ll*a*a%p;s>>=1;}return t;}
int n,a[MAXN],b[MAXN],dp[MAXM][MAXM],ans,fac[MAXM*2],inv[MAXM*2],ff[MAXM*2];
void init(){fac[0]=fac[1]=inv[0]=inv[1]=ff[1]=1;for(int i=2;i<=8000;i++)fac[i]=1ll*i*fac[i-1]%mo,ff[i]=1ll*(mo-mo/i)*ff[mo%i]%mo,inv[i]=1ll*ff[i]*inv[i-1]%mo;
}
int C(int x,int y){if(x<y||x<0||y<0)return 0;return 1ll*fac[x]*inv[y]%mo*inv[x-y]%mo;
}
signed main(){read(n);init();for(int i=1;i<=n;i++)read(a[i]),read(b[i]),dp[zero-a[i]][zero-b[i]]++;for(int i=1;i<=8000;i++)for(int x=max(0,i-4000),y=min(4000,i);x<=4000&&y>=0;x++,y--){if(x)Add(dp[x][y],dp[x-1][y],mo);if(y)Add(dp[x][y],dp[x][y-1],mo);}for(int i=1;i<=n;i++)Add(ans,dp[zero+a[i]][zero+b[i]],mo),Add(ans,mo-C(2*(a[i]+b[i]),2*a[i]),mo);printf("%d\n",1ll*inv2*ans%mo);return 0;
}

谢谢!!!

[AGC001E]BBQ Hard相关推荐

  1. 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 ...

  2. AGC001E BBQ Hard [dp]

    Description: 求∑ni=1∑nj=1,j!=iC(ai+aj+bi+bj,ai+aj)∑i=1n∑j=1,j!=inC(ai+aj+bi+bj,ai+aj)\sum_{i=1}^{n}\s ...

  3. AT1983 [AGC001E] BBQ Hard

    這遍題解需要用到逆元,學習這個新知識用了兩三個小時. 非常有意思的一道題,可以幫助自己拓展思維. 首先,我們可以想像組合數的幾何意義. 組合數 從n + m 中選 n 個的組合數就是從(0,0)走到( ...

  4. agc001E BBQ Hard

    题目链接 https://agc001.contest.atcoder.jp/tasks/agc001_e 题意简述 有nnn个烧烤包,每个烧烤包里面有一根棍子,AiA_iAi​块牛肉,BiB_iBi ...

  5. AGC001E BBQ Hard 组合计数

    题目链接 题目大概要求的就是∑i=1n∑j=i+1nC(ai+aj+bi+bj,ai+aj)∑i=1n∑j=i+1nC(ai+aj+bi+bj,ai+aj)\displaystyle\sum_{i = ...

  6. AoCoder 1983 [AGC001E] BBQ Hard(组合数+dp)

    problem 洛谷链接 solution ∑i=1n∑j=i+1n(ai+bi+aj+bjai+aj)=∑i=1n∑j=1n(ai+bi+aj+bjai+aj)−∑i=1n(2(ai+bi)2ai) ...

  7. 【AGC001E】BBQ Hard(图论,dp)

    题意:求 ∑i=1n∑j=1i−1(Ai+Aj+Bi+BjAi+Aj)\sum\limits_{i=1}^n\sum\limits_{j=1}^{i-1}\dbinom{A_i+A_j+B_i+B_j ...

  8. 美拉德不做鬼佬BBQ,只做中国餐饮文化

    旅行不仅是看没看过的风景,认识有意思的当地人,吃没吃过的美食也是两大重要且艰巨的任务.最后一定要让费用控制在预算内,谁让帅投君是穷游者呢. 根据之前的经验,吃在旅行中所占的比重大约在15-20%.什么 ...

  9. AT1983 BBQ Hard

    呦,来一次久违的BBQ吧! AT题-日本的题库质量一向很高 这题是有关组合数的DP- 前置芝士 1.快速计算组合数,具体还是自行百度. 2.膜域下的除法. 具体做法 题目中的问题: ∑i=1n∑j=i ...

最新文章

  1. Mac 建PHP 环境 及 配置 apache 默认目录
  2. MobX详解(二):ES7 装饰器 decorator
  3. spring中@Transaction注解解析
  4. pandas fillna_【Python基础】快速提升效率的6个pandas使用小技巧
  5. shell 定时删除制定目录下过期文件
  6. 【知云】第十二期:处于风口浪尖上的直播视频网站,如何快速部署直播监管?...
  7. Web前端笔记-2D图形平面内平移定位(two.js)
  8. 加了定位后div不显示了_FANUC主轴定位(M19)后诊断参数445不显示怎么办?
  9. Win10显示文件扩展名
  10. 对算法的认识——逻辑回归
  11. JSP学习——Eclipse自定义JSP模板(修改默认JSP文件)
  12. 将地址转化为高德经纬度坐标
  13. Mac——技巧:修复 M1 Mac Mini 蓝牙问题
  14. dell inspiron 只有一个飞行模式 没有wifi_连上WiFi就能打电话?“手机营业厅”中的神奇功能火了...
  15. 【UE4 C++】实现发出伤害与接收伤害
  16. 长江大学c语言程序设计答案,C语言程序设计卷及答案.doc
  17. Flash动画制作的基本步骤
  18. 小羊驼和你一起学习cocos2d-x之六(lua、android.mk)
  19. Android Zip 解压 与 进度 实现
  20. 杂文 -- IT部门构成

热门文章

  1. 没有专业技能不要紧,通过快营通也能月入上千元
  2. laravel的使用-模型和数据库基本操作
  3. SEO优化影响谷歌排名的因素
  4. SLAM——之Sophus函数库
  5. Madoka and Childish Pranks(贪心)
  6. 教你一招搞定 GitHub 下载加速!
  7. layui内置模块(element常用元素操作)
  8. Dimensionality Reduction
  9. 抖音一键生成的AI绘画火了,网友惊呼:有点东西
  10. 【程序员讲装修】平台选择第三期