AGC001E BBQ Hard 组合计数
题目链接
题目大概要求的就是∑i=1n∑j=i+1nC(ai+aj+bi+bj,ai+aj)∑i=1n∑j=i+1nC(ai+aj+bi+bj,ai+aj)\displaystyle\sum_{i = 1}^n\displaystyle\sum_{j = i + 1}^nC(a_i+a_j+b_i+b_j,a_i+a_j)
看这个式子发现怎么都不是很好求 观察到坐标范围不是很大 考虑组合意义
如果只能向右和向上走 并且x<p,y<qx<p,y<qx
则从点(x,y)(x,y)(x, y)到点(p,q)(p,q)(p, q)的方案数为C(p−x+q−y,p−x)C(p−x+q−y,p−x)C(p - x + q - y, p - x)
这个理解起来不是很难 就是总步数选取多少步向右走
回到题目 先把式子化一下 就变成了
(∑i=1n∑j≠inC(ai+aj+bi+bj,ai+aj))/2(∑i=1n∑j≠inC(ai+aj+bi+bj,ai+aj))/2(\displaystyle\sum_{i = 1}^n\displaystyle\sum_{j ≠ i}^nC(a_i+a_j+b_i+b_j,a_i+a_j)) / 2
那么题目要求的式子 就可以转化成点(−aj,−bj)(−aj,−bj)(-a_j, -b_j)到点(ai,bi)(ai,bi)(a_i, b_i)的路径数
这个东西一个O(坐标2)O(坐标2)O(坐标^2)的dpdpdp就能解决 然后就做完了
当然对于每个点要记得减去(−ai,bi)(−ai,bi)(-a_i, b_i)到(ai,bi)(ai,bi)(a_i, b_i)的方案数
Codes
#include<bits/stdc++.h>using namespace std;const int M = 2e5 + 10, N = 8000 + 10, mod = 1e9 + 7;
int a[M], b[M], fac[N], inv[N];
int ans, n, f[N][N];int qpow(int a, int x) {int ret = 1;while(x) {if(x & 1) ret = 1ll * ret * a % mod;x >>= 1, a = 1ll * a * a % mod;}return ret;
}void Init(int maxn) {scanf("%d", &n);fac[0] = inv[0] = 1;for(int i = 1; i <= maxn; ++ i)fac[i] = 1ll * fac[i - 1] * i % mod;inv[maxn] = qpow(fac[maxn], mod - 2);for(int i = maxn; i >= 1; -- i)inv[i - 1] = 1ll * inv[i] * i % mod;
}int C(int n, int m) {if(n < m) return 0;return 1ll * fac[n] * inv[m] % mod * inv[n - m] % mod;
}int main() {
#ifndef ONLINE_JUDGEfreopen("AT1983.in", "r", stdin);freopen("AT1983.out", "w", stdout);
#endifInit(N - 5);for(int i = 1; i <= n; ++ i) {scanf("%d%d", &a[i], &b[i]);++ f[2002 - a[i]][2002 - b[i]];}for(int i = 1; i <= 4002; ++ i)for(int j = 1; j <= 4002; ++ j) (f[i][j] += (f[i - 1][j] + f[i][j - 1]) % mod) %= mod;for(int i = 1; i <= n; ++ i)(ans += f[a[i] + 2002][b[i] + 2002] - C((a[i] + b[i]) * 2, a[i] * 2)) %= mod;cout << 1ll * (mod + 1) / 2 * (ans + mod) % mod << endl;return 0;
}
AGC001E BBQ Hard 组合计数相关推荐
- 解题报告(五)组合计数(ACM / OI)超高质量题解
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- 解题报告(二)E、(BZOJ3513) [MUTC2013] idiots(生成函数 + FFT + 组合计数)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
- CF1237F Balanced Domino Placements(组合计数,dp)
CF1237F Balanced Domino Placements Solution 显然可以先考虑横着的骨牌,再考虑竖着的骨牌.但是思路卡在了选取横着的骨牌会对竖着的骨牌的相邻对数产生影响. 然而 ...
- 【Luogu4921】情侣?给我烧了!(组合计数)
[Luogu4921]情侣?给我烧了!(组合计数) 题面 洛谷 题解 很有意思的一道题目. 直接容斥?怎么样都要一个平方复杂度了. 既然是恰好\(k\)对,那么我们直接来做: 首先枚举\(k\)对人出 ...
- 1307 牡牛和牝牛(组合计数-递推)
1. 问题描述: 约翰要带 N 只牛去参加集会里的展示活动,这些牛可以是牡牛,也可以是牝牛.牛们要站成一排,但是牡牛是好斗的,为了避免牡牛闹出乱子,约翰决定任意两只牡牛之间至少要有 K 只牝牛.请计算 ...
- 学组合数学心得与题解(一)——组合计数
今天我在某网站上稍微学习了一下组合数学,准确来讲,今天就看了看组合计数.像一些弱智的排列数.组合数大家肯定在小学奥数就已经精通了(只有我这种蒟蒻忘的精光).当然,博主比较菜,连二项式定理.帕斯卡恒等式 ...
- 基础组合计数常用的概念和方法总结
基础组合计数常用的概念和方法总结 一.组合计数中的基本概念与性质 1.排列 定义 性质 2.组合 定义 性质 二.组合计数中的一些常用技巧 1.容斥原理 定义 公式 2.捆绑与插空法 捆绑法 插空法 ...
- 数学知识——组合计数
组合计数 文章目录 组合计数 概述 动态规划 牡牛和牝牛 思路 代码 隔板法 方程的解 思路 代码 序列统计 思路 代码 加法 & 乘法原理 加法原理 乘法原理 车的摆放 思路 代码 容斥原理 ...
- CodeForces 997C-Sky Full of Stars〖容斥定理+组合计数〗
网页链接:传送门 C. Sky Full of Stars time limit per test : 4 seconds memory limit per test : 256 megabytes ...
最新文章
- 北邮OJ 884. 16校赛-Average Modulo
- 田野中科院计算机网络信息中心,中国科学院计算机网络信息中心硕士生导师田野...
- 华夏常春藤_我如何在没有常春藤大学学位的情况下从微软,亚马逊和Twitter获取报价
- 计算机串口接打印机并口,电子连接系统上的串口和并口知识分享
- python花瓣网爬取图片_花瓣网图片爬取
- 浙大计算机考研分数线2016,2016浙江大学考研复试分数线
- 黑苹果完美升级mac10.13.6,更换内置无线网卡dw1820A
- Linux入门基础教程
- unity的ngui的字体变形问题
- 动态申请权限---通讯录 及获取通讯录列表
- 不恰当使用线程池处理 MQ 消息引起的故障
- 2018.6.14 华为南研所面试经验
- 获取jar包中的文件,及遍历jar包中的文件
- 【整理】getopt和getopt_long函数
- Rita Hayworth and Shawshank Redemption
- 你不是输给了物联网,是输给了不信物联网
- 用NEON intrinsic实现RGB转YUV420SP(NV12)
- Day1 html5
- 数据科学家定位和职业规划
- STM32G070RBT6基于STM32CubeMX创建串口中断接收数据
热门文章
- 微信公众号原创功能怎么开通?
- java.sql.SQLException: The user specified as a definer ('root'@'%') does not exist 解决方法
- Android手写签名功能(包含画米字格,人名和书写轨迹)
- 计算机用老毛桃u盘备份系统,老毛桃一键还原,教您电脑如何使用老毛桃一键还原...
- 多用户php商城源码,bymall B2B2C多用户开源商城系统 php版 v1.0.4
- IDEA常用设置和插件推荐
- 2022五千元笔记本电脑推荐
- S7-300/400 PLC 模拟量输入/输出的量程转换
- c/c++实现五子棋
- C语言PAT刷题 - 1027 打印沙漏