Description

传送门

Solution

题目简化后要求的实际上是$\sum _{i=1}^{n-1}\sum _{j=i+1}^{n}C^{A[i]+A[j]}_{A[i]+A[j]+B[i]+B[j]}$

这时看看n的数据范围瞬间绝望qaq。

不过看到A,B的数据范围似乎明白了什么。。。好像是O(n2)的是不是?

关键:从(0,0)走到(m,n)且只能往上和右走的方案数为$C_{n+m}^{n}$

所以$C^{A[i]+A[j]}_{A[i]+A[j]+B[i]+B[j]}$等价于从(-A[i],-B[i])到(A[j],B[j])并且只能往上和右走的方案数。

em突然开心。我们把所有dp[2000-A[i]][2000-B[i]]++。

转移$dp[i][j]=dp[i-1][j]+dp[i][j-1]$显然。

接着我们到dp[2000+A[i]][2000+B[i]]处统计答案。不过要减去从(2000-A[i],2000-B[i]])到(2000+A[i],2000+B[i]])的方案数(直接组合数)

最后答案除以2。

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int mod=1e9+;
typedef long long ll;
ll fac[],inv[],ans=;
int n;
int a[],b[],f[][];
ll C(int x,int y){return fac[x]*inv[y]%mod*inv[x-y]%mod;}
int main()
{
fac[]=fac[]=inv[]=inv[]=;
for (int i=;i<=;i++) fac[i]=i*fac[i-]%mod,inv[i]=(mod-mod/i)*inv[mod%i]%mod;
for (int i=;i<=;i++) inv[i]=inv[i]*inv[i-]%mod;
scanf("%d",&n);
for (int i=;i<=n;i++)
{
scanf("%d%d",&a[i],&b[i]);
f[-a[i]][-b[i]]++;
}
for (int i=;i<=;i++) for (int j=;j<=;j++)
{
if (i) f[i][j]+=f[i-][j];if (f[i][j]>=mod) f[i][j]-=mod;
if (j) f[i][j]+=f[i][j-];if (f[i][j]>=mod) f[i][j]-=mod;
}
for (int i=;i<=n;i++)
{
ans+=f[+a[i]][+b[i]];if (ans>=mod) ans-=mod;
ans-=C((a[i]+b[i])<<,a[i]<<);
if (ans<) ans+=mod;
}
ans=ans*inv[]%mod;
cout<<ans;
}

[agc001E]BBQ Hard[组合数性质+dp]的更多相关文章

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

  2. BZOJ_3209_花神的数论题_组合数+数位DP

    BZOJ_3209_花神的数论题_组合数+数位DP Description 背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦. 描述 话说花神这天又 ...

  3. agc001E - BBQ Hard(dp 组合数)

    题意 题目链接 Sol 非常妙的一道题目. 首先,我们可以把\(C_{a_i + b_i + a_j + b_j}^{a_i + a_j}\)看做从\((-a_i, -b_i)\)走到\((a_j, ...

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

  5. [BZOJ4870][Shoi2017]组合数问题 dp+矩阵乘

    4870: [Shoi2017]组合数问题 Time Limit: 10 Sec  Memory Limit: 512 MB Description Input 第一行有四个整数 n, p, k, r ...

  6. Codeforces 869C The Intriguing Obsession:组合数 or dp

    题目链接:http://codeforces.com/problemset/problem/869/C 题意: 红色.蓝色.紫色的小岛分别有a,b,c个. 你可以在两个不同的岛之间架桥,桥的长度为1. ...

  7. POJ 3046 Ant Counting ( 多重集组合数 && 经典DP )

    题意 : 有 n 种蚂蚁,第 i 种蚂蚁有ai个,一共有 A 个蚂蚁.不同类别的蚂蚁可以相互区分,但同种类别的蚂蚁不能相互区别.从这些蚂蚁中分别取出S,S+1...B个,一共有多少种取法. 分析 :  ...

  8. 洛谷$P$3746 [六省联考2017]组合数问题 $dp$+矩乘+组合数学

    正解:$dp$+矩乘+组合数学 解题报告: 传送门! 首先不难发现这个什么鬼无穷就是个纸老虎趴,,,最多在$\binom{n\cdot k+r}{n\cdot k}$的时候就已经是0了后面显然不用做下 ...

  9. 多重集组合数 简单dp

    #include <cstdio> #include <iostream> using namespace std; +; +; +; ; int n,m,M; int a[m ...

随机推荐

  1. 操作dict时避免出现KeyError的几种方法

    在读取dict的key和value时,如果key不存在,就会触发KeyError错误,如: Python t = { ', ', ', } print(t['d']) 就会出现: <code c ...

  2. 2019.3.6 Github学习 &Git学习

    Github学习 1.使用Github 1.1 目的 借助github托管项目代码 1.2 基本概念 仓库(Repository) 仓库的意思是:即你的项目,你想在Github上开源一个项目,那就必须 ...

  3. php memcache分布式和要注意的问题

    Memcache的分布式介绍 memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能.服务器端仅包括内存存储功能,其实现非常简单.至于memcached的分布式,则是完全由客户 ...

  4. PAT——1026. 程序运行时间

    要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间.这个时间单位是clock tick,即“时 ...

  5. JDK的跳表源码分析

    JDK源码中的跳表实现类: ConcurrentSkipListMap和ConcurrentSkipListSet. 其中ConcurrentSkipListSet的实现是基于ConcurrentSk ...

  6. Java Activiti 流程审批 后台框架源码 springmvc SSM 工作流引擎

    即时通讯:支持好友,群组,发图片.文件,消息声音提醒,离线消息,保留聊天记录 工作流模块-------------------------------------------------------- ...

  7. 【腾讯敏捷转型No.7】QQ邮箱如何通过敏捷成为行业第一

    前几篇文章讲到2006年的腾讯是如何开始敏捷转型的,接下来这篇文章,我将向大家讲述,腾讯开始敏捷转型之后,QQ邮箱是如何通过敏捷成为行业第一. 众所周知,张小龙是“微信之父”,对他熟悉的人,应该也知道 ...

  8. Java异常体系和异常处理机制

    异常简介 在程序运行过程中出现错误,导致程序出现非预期场景.异常处理可以保证出现错误后,控制接下来的程序流程,是选择定位错误信息,还是抛出异常或捕获异常.还是避免程序非正常退出,都取决于我们. Jav ...

  9. ionic3 返回多个页面的写法

    直接上代码 ionic3 返回2步  3步  或者多部 this.navCtrl.popTo(this.navCtrl.getByIndex(this.navCtrl.length()-3));   ...

  10. windows 使用npm安装webpack 4.0以及配置问题的解决办法

    输入cmd点击打开 输入node -v 出现nodejs版本号 输入npm -v 出现npm版本号则安装npm安装成功, 2.安装webpack 桌面新建一个webpack-test文件夹,点击进入文 ...