题解:AT_agc065_d [AGC065D] Not Intersect

news/2025/10/8 13:52:55/文章来源:https://www.cnblogs.com/LUlululu1616/p/19129548

很牛的题。

题意:很简单了,不再赘述。

做法:

首先需要一个 Raney 引理:对于整数序列 \(a\),若 \(\sum a = 1\),则有且仅有一个 \(a\) 的循环位移满足前缀和均大于 \(0\)

来简单证明一下,首先不会有两个及以上很好说明,因为如果有两个位置开始的循环位移都合法,不妨假设分别为 \(1,p\),那么 \([1,p-1]\) 内的和大于 \(0\)\([p,n]\) 内的和也大于 \(0\),因为是整数,加起来至少是 \(2\),和序列和为 \(1\) 矛盾了。

接下来直接构造一下,如果从 \(1\) 开头合法那么即证,否则找到目前序列 \(a\) 中前缀和最小且最靠后的位置 \(p\),那么 \(p+1\) 开始的位置就一定合法。直观地感受就是我把整个图像向上平移了最小值加一这么多,肯定都是 \(>0\) 的。

一个推论是这个序列 \(n\) 个循环位移两两不同,比较好证,在此略去。


然后是本题做法,我们先对于相邻点的边直接枚举连了多少条,因为这些边没什么限制,然后考虑分配剩余的。

先破环成链,那么因为这里是很多个区间,所以我们不妨从左往右对于每个端点依次考虑选的区间。我们发现,对于一种连边方式,我们可以这么描述:

栈中有元素 \(1\),从左往右扫 \(p=2,3,\cdots n\)

  1. \(p\) 加入栈。

  2. 弹出栈中除 \(p\)\(k\) 个元素,并对栈顶连一条边,不能把栈弹出 \(1\)

可以发现这样是可以覆盖所有的情况的。

这里我们同时钦定最后一定有一条 \(n\rightarrow 1\),实际上这条边是在相邻点的边考虑的但是我们钦定一下,这样的好处在于,如果我们视第一种操作为 \(+1\), 第二种操作视为 \(-k\),那么最终操作之和为 \(1\),是一个定值就非常好操作。

发现我们上面提到了 Raney 定理及其一个推论,所以我们原本是要计数合法的序列,因为有的可能前缀和 \(<0\) 就无法构造,但是现在如果假设序列长度为 \(l\),我们可以把他的权值赋值为 \(\frac1l\),这样加起来刚好还是一样的,就不需要管是否合法了。

考虑我们现在选了 \(i\) 条,那么因为我们钦定了有 \(n\rightarrow 1\) 的边,所以我们需要在上面的序列统计中塞进去 \(m-i+1\) 个负数,还有 \(n-1\)\(+1\),这里可以看出,\(m-i+1 < n-1\) 也就是 \(m<2n-2\),如果大于等于那就无解,直接输出 \(0\)

先考虑负数内部,就等于我有 \(n-2\)\(-1\) 可以分配给这些负数每个数至少一个,方案数 \(\binom{n-3}{m-i}\)

然后考虑正数负数一起排,方案数 \(\binom{n-2+m-i+1}{n-2}\)

然后再考虑一个序列的权值,为 \(\frac{1}{n-2+m-i+1}\)

再考虑,我一开始需要选出来 \(i\) 条相邻的边,为 \(\binom{n}{i}\)

枚举 \(i\),将上面的全部乘起来即可。

注意对于 \(n\le 2\) 的情况比较神秘,直接特判即可。

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxn = 2e7 + 5, mod = 1e9 + 7;
int n, m, jc[maxn], revjc[maxn], inv[maxn], lim;
void prepare() {jc[0] = revjc[0] = revjc[1] = 1;for (int i = 1; i <= 2 * n; i++)jc[i] = jc[i - 1] * i % mod;inv[0] = inv[1] = 1;for (int i = 2; i <= 2 * n; i++)revjc[i] = (mod - mod / i) * revjc[mod % i] % mod, inv[i] = revjc[i];for (int i = 2; i <= 2 * n; i++)revjc[i] = revjc[i - 1] * revjc[i] % mod;
}
int C(int m, int n) {if(m > lim || n > lim)return 0;if(m < 0 || n < 0 || m < n)return 0;return jc[m] * revjc[n] % mod * revjc[m - n] % mod;
}
signed main() {cin >> n >> m;if(n <= 2) {cout << (m <= n - 1) << endl;return 0;}lim = 2 * n - 3;if(m > 2 * n - 3) {cout << 0 << endl;return 0;}prepare();int ans = 0;for (int i = 0; i <= min(n, m); i++) {int k = m - i + 1;if(n - 1 + k > lim)continue;ans = (ans + inv[n - 1 + k] * C(n, i) % mod * C(n - 3, k - 1) % mod * C(n - 1 + k, k)) % mod;//	cout << C(n, i) << " " << inv[n - 1 + k] << endl;}cout << ans << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/931570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp滚动导航 - unique

下面是效果图下面是实现代码<template><view class="container"><!-- 顶部导航 --><view class="navbar"><viewv-for="(item, index) in navList":key=&quo…

公司网站运营淮北建网站

一、概念 Java 内存区域和内存模型是不一样的东西&#xff0c;内存区域是指 Jvm 运行时将数据分区域存储&#xff0c;强调对内存空间的划分。 而内存模型&#xff08;Java Memory Model&#xff0c;简称 JMM &#xff09;是定义了线程和主内存之间的抽象关系&#xff0c;即 J…

三门网站制作峡江网站建设

背景&#xff1a;之前资产信息用网络接口进行数据推送&#xff0c;但是接口推送需要验证而且反应较慢。Kafak中间件提供了另一种可行的数据推送方式&#xff0c;它可以进行消息队列推送&#xff0c;且反应速度快。但是Kafka需部署在公网环境&#xff0c;并进行登录验证&#xf…

网站建设与维护视频教程篡改 网站 支付接口

面试经典&#xff08;4/150&#xff09;删除有序数组中的重复项 II 给你一个有序数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使得出现次数超过两次的元素只出现两次 &#xff0c; 返回删除后数组的新长度。不要使用额外的数组空间&#xff0c;你必须在 原…

滚动导航 - unique

下面是效果图下面是实现代码<!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8" /><title>滚动导航 Demo</title><style>body {margin:…

windows剪切板工具

列表 不推荐 ditto 界面我不喜欢,作为一个前台交互软件,用户界面搞得这么小,图片都看不清。CrossPaste 还行,但是没有标签或者说分类。 也没有导出功能。 不知道为啥,窗口总是不置顶。 提供了多种类型,算是比较现…

C#基础:启用线程池执行并行任务

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

做字素的网站wordpress get option

从各方面来看&#xff0c;互联网向 IPv6 的过渡是件很缓慢的事情。不过在最近几年&#xff0c;可能是由于 IPv4 地址资源的枯竭&#xff0c;IPv6 的使用处于上升态势。相应的&#xff0c;开发者也有兴趣确保软件能在 IPv4 和 IPv6 下工作。但是&#xff0c;正如近期 OpenBSD 邮…

P1545 [USACO04DEC] Dividing the Path G 题解

P1545 [USACO04DEC] Dividing the Path G 题解 最近开始快刷蓝紫黑了,做完会写题解交上来。 题目传送门 题意 一条长为 \(L(1 \le L \le 10^6 , 2 | L)\) 的线段上,给出 \(N(1 \le N \le 10^3)\) 个可能相交的子段 \…

AJ-Report - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

视频采集程序

项目结构:VideoCaptureApp.pro QT += core gui multimedia multimediawidgetsgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11win32 { LIBS += -L$$PWD/lib/SDL2/lib/x64 \-L$$PWD/lib/ffmpeg…

怎么做网站弄网盟wordpress qq微博

【客户行业】金属加工行业 【问题类型】薪酬体系/激励体系 【客户背景】 某大型金属加工企业位于河北地区&#xff0c;成立于2000年&#xff0c;隶属于某大型有色金属集团&#xff0c;是一家集科研、开发、生产、销售于一体的国有企业&#xff0c;人员达到1000人。经过多年…

50m专线做视频网站青羊区城乡建设网站

很多高手都喜欢使用“宏”命令来提高办公工作效率。但在 Microsoft Office 程序中使用宏时&#xff0c;总会弹出宏安全警告&#xff0c;这让使用者倍感麻烦。而如果把宏的安全级设置为“低”&#xff0c;就可以取消excel中宏安全提示框了&#xff0c;又增加了恶意代码和病毒攻击…

关于PPT的课后作业

动手动脑问题应用的是方法重载。 课后作业代码: import java.util.*; public class ArithmeticExam { private static final Random random = new Random(); private static final Scanner scanner = new Scanner(Sys…

学校网站源码html高端网站建设的品牌

I:ASP.NET MVC3 部署的前期工作 1.确认部署的服务器操作系统环境 首先我们确认服务器的操作系统版本可以从系统命令行工具里输入: systeminfo 获取相关操作系统信息例如然后再确认IIS版本信息 -> 打开IIS管理工具即可接着确认.NET Framework的版本可以在系统命令行工具执行:…

引擎搜索网站模板化学sem是什么意思

课程简介 现在还能做解说吗、不会写解说文案怎么解决、不会配音怎么解决、如何找到合适的素材资源、如何变现…这是很多想做解说的伙伴最关心的几大问题。比如文案&#xff0c;我们推荐一个网站&#xff0c;10分钟搞定一篇文案&#xff0c;配音可以真人配音也可以软件配音。5.…

RK 系列 GPU 驱动检查方法

问题背景 在调试一块板卡时发现 GPU 驱动存在异常。当时通过 GST 播放视频,想查看 GPU 占用率,却发现按照 RK 系列通常的查询方法无法获取(设备节点不存在),由此怀疑 GPU 驱动未正常加载。 检查方法 方法一:查看…

Day-15【选择与循环】选择结构-if语句 - 实践

Day-15【选择与循环】选择结构-if语句 - 实践2025-10-08 13:27 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: b…

做义工旅行有哪些网站wordpress验证码

Oracle提示错误消息ORA-28001: the password has expired&#xff0c;是由于Oracle11G的新特性所致&#xff0c; Oracle11G创建用户时缺省密码过期限制是180天&#xff08;即6个月&#xff09;&#xff0c; 如果超过180天用户密码未做修改则该用户无法登录。 Oracle公司是为了数…

咕乡

一篇模仿《王安遂》的拙作,以此纪念我初中的 OI 生涯。[1]我冒了严寒,回到相隔二千馀题,别了二十馀天的 OJ 去。 时候既然是初三;渐近 OJ 时,网络又崩溃了,404 吹进浏览器中,呜呜的响,从主页向外一望,泛白的 …