正题

题目链接: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∑n​j=i+1∑n​(ai​+aj​ai​+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,组合数学】相关推荐

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

  2. BBQ Hard dp + 组合数学 + 建模

    传送门 文章目录 题意: 思路: 题意: 有nnn组物品,每组有aia_iai​个肉和bib_ibi​个菜,你可以选择两组物品让后将肉和菜其串在一根串上,问有多少种不同的串法. 两种方法不同当且仅当选 ...

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

  4. AT1983 [AGC001E] BBQ Hard

    這遍題解需要用到逆元,學習這個新知識用了兩三個小時. 非常有意思的一道題,可以幫助自己拓展思維. 首先,我們可以想像組合數的幾何意義. 組合數 從n + m 中選 n 個的組合數就是從(0,0)走到( ...

  5. 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) ...

  6. CodeForces - 336D Vasily the Bear and Beautiful Strings(dp+组合数学)

    题目链接:点击查看 题目大意:给出一个 01 字符串,规定求值的过程如下: 每次选择末尾的两个数字: 如果为 0 0 ,那么替换成一个 1 否则替换成一个 0 循环往复,直至只剩一个数字位置,剩下的数 ...

  7. ZOJ - 4114 Flipping Game(dp+组合数学)

    题目链接:点击查看 题目大意:给出一个长度为 n 的 01 字符串表示 n 个灯泡的状态,1 为点亮,0 为熄灭,现在需要进行 k 轮操作,每轮操作可以选择恰好 m 个位置,将灯泡的状态置反,现在给出 ...

  8. 【BZOJ 3294】 3294: [Cqoi2011]放棋子 (DP+组合数学+容斥原理)

    3294: [Cqoi2011]放棋子 Description Input 输入第一行为两个整数n, m, c,即行数.列数和棋子的颜色数.第二行包含c个正整数,即每个颜色的棋子数.所有颜色的棋子总数 ...

  9. ARC 128D - Neq Neq(dp+组合数学+思维)

    链接 题意: 给出你一个长度为n的序列,你可以对其操作使得这个序列发生变化,问一共有多少种? 对于连续的i-1,i,i+1,这三个数如果满足 ai−1!=aia_{i-1}!=a_{i}ai−1​!= ...

最新文章

  1. Java三大主流开源工作流引擎技术分析
  2. PHPstorm配置同步服务器文件
  3. php如何实现读取网易有道词典输出单词的xml格式并且转化为html形式
  4. 机器学习实战3--豆瓣读书简介
  5. 双11特刊 | 全面云原生化,数据库实例独共享混部 最高降低30%成本
  6. 1. 定义方法,求出指定元素在数组中出现的次数.
  7. 吴恩达作业11:残差网络实现手势数字的识别(基于 keras)+tensorbord显示loss值和acc值
  8. linux 环境 RocketMQ 4.8.0 安装、部署控制台
  9. 大学生动漫网页设计模板 机动战士高达静态网页制作成品下载 HTML漫画网页作业带JS轮播图
  10. dnn学习:数据访问(1)
  11. 一句话总结.Net下struct和class内存分配方面的区别
  12. oracle函数应用,oracle函数应用
  13. 数据库中的左连接和右连接的区别
  14. vscode win10笔记本 蓝屏_老鸟教你win10开机蓝屏0xc000000d的详尽解决办法
  15. 物联网组成,主要包含哪些基本要素,物联网市场需求的特征是什么?
  16. js动态添加修改删除元素
  17. 186_一文看懂压敏电阻和tvs的区别
  18. 北邮数电期末复习——第三章
  19. 马丁福勒《UML精粹》读书笔记_第七章
  20. ubnt-XM.v6.3.6修改全频段方法

热门文章

  1. android宿舍管理系统源码,基于android操作系统的手机宿舍管理系统使用手册
  2. oracle与sqlserver差异,Oracle与SQLServer的SQL语法差异总结
  3. qq截图工具提取_QQ截图隐藏的这些简单又实用的技能,怪我没早告诉你
  4. xftp6设置默认打开文件的程序_修改文件默认打开方式,不改变原图标
  5. 掌握JVM 运行时数据区,其实不是很难,加薪也是要技巧可言的!!!
  6. php网页连mysql_php - 如何在单个网页上连接多个MySQL数据库?
  7. python 什么可以作为变量名_为什么强烈禁止开发人员使用isSuccess作为变量名
  8. 软件构造学习笔记-第十二周
  9. leetcode704二分法:(左闭右闭+左闭右开)
  10. [剑指offer]面试题15:链表中倒数第k个结点