当前位置: 首页 > news >正文

[AGC001E] BBQ Hard 分析

题目概述

给出 \(n\)\(a_i,b_i\),其中 \(a_i\) 代表 \(0\) 的个数,\(b_i\) 代表 \(1\) 的个数,让你求对于所有的 \((i,j)(i<j)\) 这些 \(0,1\) 组合起来的本质不同的个数之和。

分析

思维好题!

首先我们不难想到卡特兰数的方法去求他后面这些东西。换言之,题目转化为求:

\[\sum_{i=1}^n\sum_{j=i+1}^n\binom{a_i+b_i+a_j+b_j}{a_i+a_j} \]

显然这个可以变成:

\[\frac 1 2\left(\sum_{i=1}^n\sum_{j=1}^n\binom{a_i+b_i+a_j+b_j}{a_i+a_j}-\sum_{i=1}^n\binom{2a_i+2b_i}{2a_i}\right) \]

考虑怎么求前面的那一个。

我们注意到我们的本质是从 \((0,0)\rightarrow (a_i+a_j,b_i+b_j)\)

一个巧妙的转化:将他变成 \((-a_i,-b_i)\rightarrow(a_j,b_j)\)

然后就很简单了,这是一个组合数递推问题,将一开始赋为 \(1\) 即可。

然后这题目就做完了。

代码

时间复杂度 \(\mathcal{O}(n+\max a_i^2)\)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <stdlib.h>
#include <algorithm>
#include <vector>
#define int long long
#define N 200005
using namespace std;
const int mod = 1e9 + 7;
int jc[N],inv[N];
int C(int a,int b) {if (a < 0 || b < 0 || a < b) return 0;return jc[a] * inv[b] % mod * inv[a - b] % mod;
}
void pls(int &x,int y) {(x += y) %= mod;
}
int n,a[N],b[N],f[4005][4005];
signed main(){jc[0] = inv[0] = jc[1] = inv[1] = 1;for (int i = 2;i < N;i ++) jc[i] = jc[i - 1] * i % mod,inv[i] = (mod - mod / i) * inv[mod % i] % mod;for (int i = 2;i < N;i ++) inv[i] = inv[i - 1] * inv[i] % mod;cin >> n;int delt = 2000,ans = 0;for (int i = 1;i <= n;i ++) scanf("%lld%lld",&a[i],&b[i]),f[-a[i] + delt][-b[i] + delt] ++,ans += C(2 * a[i] + 2 * b[i],2 * a[i]),ans %= mod;for (int i = 0;i <= 4000;i ++)for (int j = 0 + (i == 0);j <= 4000;j ++) {if (i) pls(f[i][j],f[i - 1][j]);if (j) pls(f[i][j],f[i][j - 1]);}ans = (-ans + mod) % mod;for (int i = 1;i <= n;i ++) ans = (ans + f[a[i] + delt][b[i] + delt]) % mod;cout << ans * (mod + 1) / 2 % mod;return 0;
}

后记

最近打 ABC 有类似题:abc432_g。

但是值域很大,不能用这种方法做,只能考虑 poly trick。

http://www.gsyq.cn/news/51541.html

相关文章:

  • 哈希从入门到入土『给学弟学妹们讲课用的』
  • 20232303 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • .net 8+, 类库无法引用 WebApplication 的解决方案
  • 网络分析模型七
  • 2025-11-16
  • P14092 [ICPC 2023 Seoul R] M. S. I. S.
  • 【具身智能科普】表格分析核心概念、技术体系、应用场景落地、商业化等 - 指南
  • temperature、top_p、top_k
  • PyCharm gitee: Merge with strategy ort failed.
  • 获取数据,转换成JSON,返回到前端页面
  • 2025年11月副业平台推荐榜:五强生态模式深度解析
  • 完整教程:MySQL 8.0.29 及以上版本中 SSL/TLS 会话复用(Session Reuse)
  • 红队、蓝队与紫队:网络安全攻防演练的三大支柱
  • 2025年11月副业平台评价榜:零门槛生态对比助你安全增收
  • 调整电话交换机 3CX 对接微软 Teams 直接路由
  • Pycharm为什么会自动创建__pycache__
  • 山东大学 计算机图形学实验 二维网格剖分 Catmull-Clark算法
  • 什么是“组态路径”?
  • 深入探索剖析 JVM 的启动过程
  • noip8多校2
  • 2025年11月冷媒剂厂家榜单:五强技术参数与口碑对比评测
  • 工业级时序数据库选型指南:技巧架构与场景化实践
  • 20232429 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • P5797 [SEERC 2019] Max or Min
  • 完整教程:【论文精读】Latent-Shift:基于时间偏移模块的高效文本生成视频技术
  • (链表)找单链表倒数第k个结点
  • 和为定值的子集数 25-11-16
  • 分布式监控体系:从指标采集到智能告警的完整之道 - 实践
  • hot 100 (1)—— 两数之和(哈希) - 指南
  • Day40(10)-F:\硕士阶段\Java\课程代码\后端\web-ai-code\web-ai-project01\springboot-mybatis-quickstart