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. 原生js模仿jq fadeIn fadeOut效果 兼容IE低版本

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. Mac下的mongodb安装

    mac下的mongodb安装主要有两种方式,一是手工安装,需在官网下载源文件,二是通过homebrew,至于homebrew不做介绍.既然是Mac系统下,我认为直接通过homebrew安装最好,省事还 ...

  3. 安装chrome jsonView插件

    1.打开 https://github.com : 2.搜索 jsonView 链接:https://github.com/search?utf8=%E2%9C%93&q=jsonview: ...

  4. BZOJ2223/3524:[POI2014] Couriers(主席树)

    Description 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0 ...

  5. P2258 子矩阵

    题目描述 给出如下定义: 子矩阵:从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵(保持行与列的相对顺序)被称为原矩阵的一个子矩阵. 例如,下面左图中选取第 222 . 444 行和第 222 ...

  6. [19/04/17-星期三] Java的动态性_反射(Reflection)机制

    一.前言 动态语言:程序运行时,可以改变程序结构或变量类型.典型的代表:Python,ruby,JavaScript 如JavaScript代码: function test(){ var s=&qu ...

  7. Activation Functions

    Sigmoid Sigmoids saturate and kill gradients. Sigmoid outputs are not zero-centered. Exponential fun ...

  8. Java中的集合框架-Collection(二)

    上一篇<Java中的集合框架-Collection(一)>把Java集合框架中的Collection与List及其常用实现类的功能大致记录了一下,本篇接着记录Collection的另一个子 ...

  9. Linux-- 查看文件 more与其它

    more 翻页查看 用法:more 文件名 nl 显示行号打印(不常用) 1.不打印空白行行号:nl -b t 文件名 类似 cat -b 文件名 2.打印所有行行号:nl -b a 文件名 类似 c ...

  10. iOS项目启动及启动时间优化

    app的启动入口Main函数: int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc ...