AT1983-[AGC001E]BBQ Hard【dp,组合数学】
正题
题目链接:https://www.luogu.com.cn/problem/AT1983
题目大意
给出\(n\)个数对\((a_i,b_i)\)
求
\]
\(1\leq n\leq 2\times 10^5,1\leq a_i,b_i\leq 2000\)
解题思路
啊遇到这种题目直接上组合意义 \(\color{white}{组合意义天地灭}\)
然后发现\(a_{i},b_i\)很小。上面那个组合数可以变成横着走\(a_i+a_j\)步,竖着走\(b_i+b_j\)步的方案。
之后理解为从\((-a_i,-b_i)\)走到\((a_j,b_j)\)就可以分离\(i,j\)了。
因为很小,直接多起点走一次求和就好了,要减去重复的部分。
时间复杂度\(O(n+max\{a_i\}\times max\{b_i\})\)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=2e5+10,M=4500,P=1e9+7;
ll n,a[N],b[N],f[M][M],fac[N],inv[N],ans;
ll C(ll n,ll m)
{return fac[n]*inv[m]%P*inv[n-m]%P;}
signed main()
{
scanf("%lld",&n);inv[1]=1;
for(ll i=2;i<N;i++)inv[i]=P-inv[P%i]*(P/i)%P;
inv[0]=fac[0]=1;
for(ll i=1;i<N;i++)
fac[i]=fac[i-1]*i%P,inv[i]=inv[i-1]*inv[i]%P;
for(ll i=1;i<=n;i++){
scanf("%lld%lld",&a[i],&b[i]);
f[2001-a[i]][2001-b[i]]++;
}
for(ll i=1;i<=4002;i++)
for(ll j=1;j<=4002;j++)
(f[i][j]+=f[i-1][j]+f[i][j-1])%=P;
for(ll i=1;i<=n;i++){
(ans+=f[2001+a[i]][2001+b[i]]%P)%=P;
(ans-=C(2*a[i]+2*b[i],2*a[i]))%=P;
}
printf("%lld\n",(ans+P)*inv[2]%P);
return 0;
}
AT1983-[AGC001E]BBQ Hard【dp,组合数学】的更多相关文章
- 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
[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 ...
- CF_229E_Gift_概率DP+组合数学
CF_229E_Gift_概率DP+组合数学 题目描述: 很久很久以前,一位老人和他的妻子住在蔚蓝的海边.有一天,这位老人前去捕鱼,他捉到了一条活着的金鱼.鱼说:“噢,老渔人!我祈求你放我回到海里,这 ...
- [多校联考2019(Round 5 T3)]青青草原的表彰大会(dp+组合数学)
[多校联考2019(Round 5)]青青草原的表彰大会(dp+组合数学) 题面 青青草原上有n 只羊,他们聚集在包包大人的家里,举办一年一度的表彰大会,在这次的表彰大会中,包包大人让羊们按自己的贡献 ...
- [Codeforces722E] Research Rover (dp+组合数学)
[Codeforces722E] Research Rover (dp+组合数学) 题面 给出一个N*M的方格阵,从(1,1)出发,到(N,M)结束,从(x,y)只能走到(x+1,y)或(x,y+1) ...
- [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的数据范围比较小,所 ...
- [AGC001E]BBQ Hard 组合数学
题目描述 Snuke is having another barbeque party. This time, he will make one serving of Skewer Meal. He ...
随机推荐
- Vue 如何实现一个底部导航栏组件
参考网址: https://www.jianshu.com/p/088936b7b1bd/ Vue 如何实现一个底部导航栏组件 可以看到父组件是知道我点击了底部TabBar的哪个item的. 实现 实 ...
- ASP.NET Core:中间件
一.什么是中间件 我们都知道,任何的一个web框架都是把http请求封装成一个管道,每一次的请求都是经过管道的一系列操作,最终才会到达我们写的代码中.而中间件就是用于组成应用程序管道来处理请求和响应的 ...
- WPF 实现完全可控制的漂亮自定义窗口
在WPF界面开发中,有时候不想用系统的死板的窗口,想要来点新花样,常会自定义窗口. 那么,先抛出问题,想搞出下面这样的窗口,该咋整 ? aa 下面看一个啥也没设置过的普通窗口,这样的窗口,我们只能控 ...
- 【linux】vim常用命令
转自:https://www.runoob.com/linux/linux-vim.html vi/vim 的使用 基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输 ...
- 关于windows下 python3安装 cython的说明
针对python3.6希望在windows环境下安装cython,但是网上任何关于mingw的尝试都没有生效.所以只能下载 vs, 1.去官网https://visualstudio.microsof ...
- AOP的底层实现-CGLIB动态代理和JDK动态代理
AOP是目前Spring框架中的核心之一,在应用中具有非常重要的作用,也是Spring其他组件的基础.它是一种面向切面编程的思想.关于AOP的基础知识,相信多数童鞋都已经了如指掌,我们就略过这部分,来 ...
- Java规范化代码eclipse模板注释
建议下载阿里规范化插件 阿里的new java file的注释模板(Type): /** * @author ${user} * @date ${currentDate:date('YYYY/MM ...
- CNN的Pytorch实现(LeNet)
CNN的Pytorch实现(LeNet) 上次写了一篇CNN的详解,可是累坏了老僧我.写完后拿给朋友看,朋友说你这Pytorch的实现方式对于新人来讲会很不友好,然后反问我说里面所有的细节你都明白 ...
- python3使用pycuda执行简单GPU计算任务
技术背景 GPU的加速技术在深度学习.量子计算领域都已经被广泛的应用.其适用的计算模型是小内存的密集型计算场景,如果计算的模型内存较大,则需要使用到共享内存,这会直接导致巨大的数据交互的运算量,通信开 ...
- Ajax的GET,POST方法传输数据和接收返回数据
//首先创建一个Ajax对象 function ajaxFunction(){ var xmlHttp; try{ // Firefox, Opera 8.0+, Safari xmlHttp=new ...