[ACG001E] BBQ hard [dp]
题面:
思路:
首先,一个暴力的想法
对于每一对pack,求出f(ai+aj,bi+bj),其中f(x,y)=(x+y)!/(x!y!),也就是x个a,y个b的排列方式个数
然后转化模型,将f数组变化成这样的形式:f(x,y)表示一个x行y列的方格图,左下走到右上的方法数
然后将所有的f放到一个图中,就变成了:左下的n个点(-ai,-bi)到右上的n个点(ai,bi)的总方法数(任意一个出发任意一个到达)
用DAGdp把这个方法数求出来,就是sigma(f(ai+aj,bi+bj))(i=1...n,j=1...n),减去所有的f(ai+ai,bi+bi)再除以二即可
注意:MOD1e9+7意义下,要使用乘法逆元
Code:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
#define MOD 1000000007
using namespace std;
inline int read(){
int re=,flag=;char ch=getchar();
while(ch>''||ch<''){
if(ch=='-') flag=-;
ch=getchar();
}
while(ch>=''&&ch<='') re=(re<<)+(re<<)+ch-'',ch=getchar();
return re*flag;
}
const int dx[]={,,},dy[]={,,};
ll dp[][];int N=;bool vis[][];
int n,xx[],yy[],qx[],qy[],head=,tail=,maxq=;
ll inv[],finv[],f[];
void init(){
int i;inv[]=finv[]=;
for(i=;i<=;i++){
inv[i]=((MOD-MOD/i)*inv[MOD%i])%MOD;
}
f[]=;
for(i=;i<=;i++){
f[i]=(f[i-]*i)%MOD;
finv[i]=(finv[i-]*inv[i])%MOD;
}
}
int main(){
init();
int i,maxx=,maxy=,x,y,tx,ty;ll X=;
n=read();
for(i=;i<=n;i++){
xx[i]=read();yy[i]=read();
dp[N-xx[i]][N-yy[i]]+=;
maxx=max(maxx,xx[i]);maxy=max(maxy,yy[i]);
}
qx[]=N-maxx,qy[]=N-maxy;vis[N-maxx][N-maxy]=;
while(head!=tail){
x=qx[head];y=qy[head];head=(head+)%maxq;
// cout<<"dp "<<x<<ends<<y<<ends<<dp[x][y]<<endl;;
for(i=;i<=;i++){
tx=x+dx[i];ty=y+dy[i];
if(tx>N+maxx||ty>N+maxy) continue;
dp[tx][ty]=(dp[tx][ty]+dp[x][y])%MOD;
// cout<<" to "<<tx<<ends<<ty<<ends<<dp[tx][ty]<<endl;
if(!vis[tx][ty]){
vis[tx][ty]=;
qx[tail]=tx;qy[tail]=ty;tail=(tail+)%maxq;
}
}
}
for(i=;i<=n;i++){
X=X+dp[N+xx[i]][N+yy[i]];X%=MOD;
X=X-((f[xx[i]*+yy[i]*]*finv[xx[i]*])%MOD*finv[yy[i]*])%MOD+MOD;
X%=MOD;
}
printf("%lld\n",(X*inv[])%MOD);
}
[ACG001E] 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[组合数性质+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的数据范围比较小,所 ...
- AGC 001E.BBQ Hard(组合 DP)
题目链接 \(Description\) 给定长为\(n\)的两个数组\(a,b\),求\[\sum_{i=1}^n\sum_{j=i+1}^n\binom{a_i+a_j+b_i+b_j}{a_i+ ...
- AT1983-[AGC001E]BBQ Hard【dp,组合数学】
正题 题目链接:https://www.luogu.com.cn/problem/AT1983 题目大意 给出\(n\)个数对\((a_i,b_i)\) 求 \[\sum_{i=1}^n\sum_{j ...
- [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 ...
- ATcoder 1983 BBQ Hard
E - BBQ Hard Time limit : 2sec / Memory limit : 256MB Score : 1400 points Problem Statement Snuke is ...
- 「AT1983 BBQ Hard」
呦,来一次久违的BBQ吧! AT题...日本的题库质量一向很高 这题是有关组合数的DP... 前置芝士 快速计算组合数,具体还是自行百度. 膜域下的除法. 具体做法 题目中的问题: \(\sum_{i ...
随机推荐
- 2018.2.8 php实现qq登陆接口
PHP实现QQ登录的原理和实现过程 2018-02-08 学习与分享 PHP自学中心 第三方登录,就是使用大家比较熟悉的比如QQ.微信.微博等第三方软件登录自己的网站,这可以免去注册账号.快速留住用户 ...
- GB MB KB B 关系
1KB=1024Bytes=2的10次方Bytes 1MB=1024KB=2的20次方Bytes 1GB=1024MB=2的30次方Bytes 1TB=1024GB=2的40次方Bytes
- 标准对象 -------JavaScript
本文摘要:http://www.liaoxuefeng.com/ 在JavaScript的世界里,一切都是对象. 但是某些对象还是和其他对象不太一样.为了区分对象的类型,我们用typeof操作符获取对 ...
- React 服务端渲染最佳解决方案
最近在开发一个服务端渲染工具,通过一篇小文大致介绍下服务端渲染,和服务端渲染的方式方法.在此文后面有两中服务端渲染方式的构思,根据你对服务端渲染的利弊权衡,你会选择哪一种服务端渲染方式呢? 什么是服务 ...
- C/C++程序基础 (九)排序算法简述
排序算法 算法复杂度 算法简述 插入排序 N2 前方有序,依次将后方无序数据插入前方合适位置. 冒泡排序 N2 前方有序,从后方两两比较,将最小泡冒到前方. 选择排序 N2 前方有序,从后方选择最小的 ...
- Python 文件读写 文件和路径
1.在Windows上,使用倒斜杆作为文件夹之间的分隔符,在Linux上,使用正斜杠作为路径分隔符.在编写Python脚本时,可以os.path.join()函数来处理 在Windows环境下命令如下 ...
- PHP递归排序怎么实现的?
递归算法对于任何一个编程人员来说,应该都不陌生.因为递归这个概念,无论是在PHP语言还是Java等其他编程语言中,都是大多数算法的灵魂. 对于PHP新手来说,递归算法的实现原理可能不容易理解.但是 ...
- SSM(Spring+Spring MVC+Mybatis)开发前台后功能完整的java开源博客管理系统
项目描述 本项目通过SSM(SpringMVC+Mybatis+Spring)框架编写的一个人博客管理系统,使用hexo主题,以及MAVEN进行对项目管理,并且前端具有粒子和点击爱心效果.后端的页面框 ...
- 【STM32】IIC的基本原理(实例:普通IO口模拟IIC时序读取24C02)(转载)
版权声明:本文为博主原创文章,允许转载,但希望标注转载来源. https://blog.csdn.net/qq_38410730/article/details/80312357 IIC的基本介绍 ...
- Xenia and Bit Operations CodeForces - 339D
Xenia and Bit Operations CodeForces - 339D Xenia the beginner programmer has a sequence a, consistin ...