AT1983-[AGC001E]BBQ Hard【dp,组合数学】
正题
题目链接:https://www.luogu.com.cn/problem/AT1983
题目大意
给出nnn个数对(ai,bi)(a_i,b_i)(ai,bi)
求
∑i=1n∑j=i+1n(ai+bi+aj+bjai+aj)\sum_{i=1}^n\sum_{j=i+1}^n\binom{a_i+b_i+a_j+b_j}{a_i+a_j}i=1∑nj=i+1∑n(ai+ajai+bi+aj+bj)
1≤n≤2×105,1≤ai,bi≤20001\leq n\leq 2\times 10^5,1\leq a_i,b_i\leq 20001≤n≤2×105,1≤ai,bi≤2000
解题思路
啊遇到这种题目直接上组合意义组合意义天地灭\color{white}\text{组合意义天地灭}组合意义天地灭
然后发现ai,bia_{i},b_iai,bi很小。上面那个组合数可以变成横着走ai+aja_i+a_jai+aj步,竖着走bi+bjb_i+b_jbi+bj步的方案。
之后理解为从(−ai,−bi)(-a_i,-b_i)(−ai,−bi)走到(aj,bj)(a_j,b_j)(aj,bj)就可以分离i,ji,ji,j了。
因为很小,直接多起点走一次求和就好了,要减去重复的部分。
时间复杂度O(n+max{ai}×max{bi})O(n+max\{a_i\}\times max\{b_i\})O(n+max{ai}×max{bi})
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,组合数学】相关推荐
- 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 ...
- BBQ Hard dp + 组合数学 + 建模
传送门 文章目录 题意: 思路: 题意: 有nnn组物品,每组有aia_iai个肉和bib_ibi个菜,你可以选择两组物品让后将肉和菜其串在一根串上,问有多少种不同的串法. 两种方法不同当且仅当选 ...
- 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 ...
- AT1983 [AGC001E] BBQ Hard
這遍題解需要用到逆元,學習這個新知識用了兩三個小時. 非常有意思的一道題,可以幫助自己拓展思維. 首先,我們可以想像組合數的幾何意義. 組合數 從n + m 中選 n 個的組合數就是從(0,0)走到( ...
- 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) ...
- CodeForces - 336D Vasily the Bear and Beautiful Strings(dp+组合数学)
题目链接:点击查看 题目大意:给出一个 01 字符串,规定求值的过程如下: 每次选择末尾的两个数字: 如果为 0 0 ,那么替换成一个 1 否则替换成一个 0 循环往复,直至只剩一个数字位置,剩下的数 ...
- ZOJ - 4114 Flipping Game(dp+组合数学)
题目链接:点击查看 题目大意:给出一个长度为 n 的 01 字符串表示 n 个灯泡的状态,1 为点亮,0 为熄灭,现在需要进行 k 轮操作,每轮操作可以选择恰好 m 个位置,将灯泡的状态置反,现在给出 ...
- 【BZOJ 3294】 3294: [Cqoi2011]放棋子 (DP+组合数学+容斥原理)
3294: [Cqoi2011]放棋子 Description Input 输入第一行为两个整数n, m, c,即行数.列数和棋子的颜色数.第二行包含c个正整数,即每个颜色的棋子数.所有颜色的棋子总数 ...
- ARC 128D - Neq Neq(dp+组合数学+思维)
链接 题意: 给出你一个长度为n的序列,你可以对其操作使得这个序列发生变化,问一共有多少种? 对于连续的i-1,i,i+1,这三个数如果满足 ai−1!=aia_{i-1}!=a_{i}ai−1!= ...
最新文章
- Java三大主流开源工作流引擎技术分析
- PHPstorm配置同步服务器文件
- php如何实现读取网易有道词典输出单词的xml格式并且转化为html形式
- 机器学习实战3--豆瓣读书简介
- 双11特刊 | 全面云原生化,数据库实例独共享混部 最高降低30%成本
- 1. 定义方法,求出指定元素在数组中出现的次数.
- 吴恩达作业11:残差网络实现手势数字的识别(基于 keras)+tensorbord显示loss值和acc值
- linux 环境 RocketMQ 4.8.0 安装、部署控制台
- 大学生动漫网页设计模板 机动战士高达静态网页制作成品下载 HTML漫画网页作业带JS轮播图
- dnn学习:数据访问(1)
- 一句话总结.Net下struct和class内存分配方面的区别
- oracle函数应用,oracle函数应用
- 数据库中的左连接和右连接的区别
- vscode win10笔记本 蓝屏_老鸟教你win10开机蓝屏0xc000000d的详尽解决办法
- 物联网组成,主要包含哪些基本要素,物联网市场需求的特征是什么?
- js动态添加修改删除元素
- 186_一文看懂压敏电阻和tvs的区别
- 北邮数电期末复习——第三章
- 马丁福勒《UML精粹》读书笔记_第七章
- ubnt-XM.v6.3.6修改全频段方法
热门文章
- android宿舍管理系统源码,基于android操作系统的手机宿舍管理系统使用手册
- oracle与sqlserver差异,Oracle与SQLServer的SQL语法差异总结
- qq截图工具提取_QQ截图隐藏的这些简单又实用的技能,怪我没早告诉你
- xftp6设置默认打开文件的程序_修改文件默认打开方式,不改变原图标
- 掌握JVM 运行时数据区,其实不是很难,加薪也是要技巧可言的!!!
- php网页连mysql_php - 如何在单个网页上连接多个MySQL数据库?
- python 什么可以作为变量名_为什么强烈禁止开发人员使用isSuccess作为变量名
- 软件构造学习笔记-第十二周
- leetcode704二分法:(左闭右闭+左闭右开)
- [剑指offer]面试题15:链表中倒数第k个结点