【学习笔记】[ARC156E] Non-Adjacent Matching

首先,记 S = ∑ X i S=\sum X_i S=Xi,那么恰好有 S 2 \frac{S}{2} 2S条边( S S S为偶数);序列 { X i } \{X_i\} {Xi}合法的充要条件是:

  • 对于任意 i i i,满足 X i + X i + 1 ≤ S 2 X_i+X_{i+1}\le \frac{S}{2} Xi+Xi+12S

这种东西 Kidulthood 就很会猜,而我就没有这么好的直觉了😅

然后考虑容斥 X i + X i + 1 > S 2 X_i+X_{i+1}>\frac{S}{2} Xi+Xi+1>2S的位置,显然这构成了一个连续段,并且长度不超过 2 2 2

考虑每一段的生成函数是什么。

1.1 1.1 1.1 总方案数

每一段的生成函数是 1 − x m + 1 1 − x \frac{1-x^{m+1}}{1-x} 1x1xm+1,因此 G F GF GF为:

( 1 − x m + 1 ) n ( ∑ ( i + n − 1 n − 1 ) x i ) (1-x^{m+1})^{n}(\sum \binom{i+n-1}{n-1}x^i) (1xm+1)n((n1i+n1)xi)

枚举前面那一项,后面用前缀和算即可。注意算的是偶次方项的系数,复杂度 O ( n m ) O(nm) O(nm)

1.2 1.2 1.2 只有一个位置不合法

考虑容斥的 i , i + 1 i,i+1 i,i+1构成一段,则枚举 S S S后的 G F GF GF为:

( ∑ S 2 < i ≤ 2 m ( min ⁡ ( m , i ) − max ⁡ ( i − m , 0 ) + 1 ) x i ) ( 1 − x m + 1 ) n − 2 ( ∑ ( i + n − 3 n − 3 ) x i ) (\sum_{\frac{S}{2}<i\le 2m}(\min(m,i)-\max(i-m,0)+1)x^i)(1-x^{m+1})^{n-2}(\sum \binom{i+n-3}{n-3}x^i) (2S<i2m(min(m,i)max(im,0)+1)xi)(1xm+1)n2((n3i+n3)xi)

枚举第一项即可,其中第二项的取值只有常数个,对于 i > S 2 i>\frac{S}{2} i>2S的条件 只要保证第一项的次数大于后两项的次数之和即可。复杂度 O ( m ) O(m) O(m)

1.3 1.3 1.3 有两个位置不合法

枚举中间的数和两边中较小的数之,以及两边中较大的数的值,然后直接算。复杂度 O ( m 2 ) O(m^2) O(m2)

总复杂度 O ( n m ) O(nm) O(nm)

remark \text{remark} remark 看似要枚举的东西很多,但是借助 G F GF GF可以发现实际上要枚举的东西很少。

#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define fi first
#define se second
#define db double
#define inf 0x3f3f3f3f3f3f3f3f
using namespace std;
const int N=3005;
const int M=3005*3005;
const int mod=998244353;
int n,m,K;
ll fac[M],inv[M],sm[M],sm2[M],sm3[M];
ll fpow(ll x,ll y=mod-2){ll z(1);for(;y;y>>=1){if(y&1)z=z*x%mod;x=x*x%mod;}return z;
}
ll binom(int x,int y){if(x<0||y<0||x<y)return 0;return fac[x]*inv[y]%mod*inv[x-y]%mod;
}
void add(ll &x,ll y){x=(x+y)%mod;
}
void init(int mx){fac[0]=1;for(int i=1;i<=mx;i++)fac[i]=fac[i-1]*i%mod;inv[mx]=fpow(fac[mx]);for(int i=mx;i>=1;i--)inv[i-1]=inv[i]*i%mod;for(int i=0;i<=mx;i++){sm[i]=binom(i+n-1,n-1),sm2[i]=binom(i+n-3,n-3),sm3[i]=binom(i+n-4,n-4);if(i>=2)sm[i]=(sm[i]+sm[i-2])%mod,sm2[i]=(sm2[i]+sm2[i-2])%mod,sm3[i]=(sm3[i]+sm3[i-2])%mod;}
}
ll res1,res2,res3;
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>n>>m>>K,init(K+n);for(int i=0;i<=n;i++){int j=K-i*(m+1),sgn=(i&1)?-1:1;if(j<0)continue;if((i*(m+1)+j)%2)j--;if(j>=0)add(res1,sgn*binom(n,i)%mod*sm[j]);}for(int i=2;i<=2*m;i++){for(int j=0;j*(m+1)<i;j++){int k=min(i-j*(m+1)-1,K-i-j*(m+1)),sgn=(j&1)?-1:1;if(k<0)continue;if((i+j*(m+1)+k)%2)k--;if(k>=0)add(res2,sgn*(min(m,i)-max(i-m,0)+1)*binom(n-2,j)%mod*sm2[k]);}}for(int i=2;i<=2*m;i++){for(int j=0;j<=min(i-1,m);j++){int l=max(0,i-m),r=min(m,j);if(l<=r){for(int k=0;k*(m+1)+j<i;k++){int mx=min(K-i-j-k*(m+1),i-j-k*(m+1)-1),sgn=(k&1)?-1:1;if(mx<0)continue;if((i+j+k*(m+1)+mx)%2)mx--;if(mx>=0){add(res3,2*sgn*(r-l+1)*binom(n-3,k)%mod*sm3[mx]);if(l<=j&&j<=r)add(res3,-sgn*binom(n-3,k)%mod*sm3[mx]);}}}}}res1=(res1-n*res2+n*res3)%mod;cout<<(res1+mod)%mod;
}

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

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

相关文章

上市公司-托宾Q值数据集(2000-2022年)

本文数据为上市公司-托宾Q值数据。托宾Q值是由托宾&#xff08;James Tobin&#xff09;提出的一个指标&#xff0c;用以测量公司的投资机会与市场对其估值的比较。理论上&#xff0c;如果托宾Q值大于1&#xff0c;那么公司的市场价值超过了它的资产价值&#xff0c;这意味着公…

信息科技如何做好风险管理

文章目录 前言介绍亮点结构读者对象 前言 信息科技对金融业务发展所起的作用是举足轻重的。 近年来&#xff0c;金融机构在战略规划中相继引入科技引领的概念。作为金融机构信息科技从业人员&#xff0c;我们笃信信息科技是一个非常有用的工具&#xff0c;一个兼具产品思维和管…

Linux 内核打印(高级字符设备六)

一、dmseg 命令 在终端使用 dmseg 命令可以获取内核打印信息&#xff0c;该命令的具体使用方法如下所示&#xff1a;dmesg 命令   英文全称&#xff1a;display message&#xff08;显示信息&#xff09;   作用&#xff1a;kernel 会将打印信息存储在 ring buffer 中。可以…

Mysql在ubuntu22.04上安装配置

更新并下载Mysql sudo apt update sudo apt install mysql-server启动Mysql服务 sudo systemctl start mysql安全配置 包括设置密码、删除匿名用户、禁止远程root登录等&#xff0c;按提示进行即可。 sudo mysql_secure_installation是否设置密码&#xff1a;是 三种强度密…

DBeaver连接数据库报错:Public Key Retrieval is not allowed 的解决方案

写在前面&#xff1a; DBeaver是一款免费的数据库管理工具&#xff0c;安装也是傻瓜式一键安装&#xff0c;比较推荐。 DBeaver官网&#xff08;加载有点慢&#xff0c;耐心等待&#xff09;&#xff1a;DBeaver Community | Free Universal Database Tool 报错详情&#xff…

Golang链路追踪:实现高效可靠的分布式系统监控

引言 在当今互联网应用的架构中&#xff0c;分布式系统已经成为主流。分布式系统的优势在于能够提供高可用性、高并发性和可扩展性。然而&#xff0c;随着系统规模和复杂性的增加&#xff0c;系统的监控和调试变得越来越困难。为了解决这个问题&#xff0c;链路追踪技术应运而…

ARM,汇编指令

一、汇编指令 1、搬移指令 mov r0 ,#3 mov r1,r0 msr cpsr,r0 mrs r0,cpsr 2、条件执行及标志位 cmp moveq movgt 3、机器码 1&#xff09;、立即数合法性 2&#xff09;、立即数不合法 ldr r0,0x12345678 伪指令解决不合法的问题 前4位表示16个数&#xff0c;一个数移动2次。 …

前端第一阶段测试

前端第一阶段测试 选择问答 如果觉得有用请给我点个赞⑧~ 选择 1、【单选】下列哪个是子代选择器 A A、p>b B、p b C、pb D、p.b 2、【单选】下述有关css属性position的属性值的描述&#xff0c;说法错误的是&#xff1f;B A、static&#xff1a;没有定位&#xff0c;元素出…

Python基础学习004——for循环与字符串

""" 1.for循环基本语法 2.做指定次数的循环,range()函数 3.continue的使用 4.字符串的定义与使用:转义符,原生字符 5.获取字符串长度,字符串索引的使用 6.切片,翻转字符串 7.字符串的查找find 8.字符串的替换replace 9.字符串的拆分split 10.字符串的链接join &…

疯狂java 三-六章

第三章 数据类型和运算符 Java语言是强类型语言&#xff0c;意思是每个变量和每个表达式都有一个在编译时就确定的类型&#xff0c;所有的变量都必须显式声明类型 标识符就是类&#xff0c;变量、方法命名的符号 标识符不能包含空格 标识符只能包含美元符($)&#xff0c;不…

在LayerUI中使用onChange事件监听复选框的值变化

在LayerUI中&#xff0c;你可以使用onChange事件监听复选框的值变化。当复选框的状态发生变化时&#xff0c;onChange事件会被触发。 以下是一个示例代码&#xff0c;演示了如何使用onChange事件监听复选框的值变化&#xff1a; jsx import React from react; import { Chec…

UG\NX二次开发 连接曲线、连结曲线 UF_CURVE_auto_join_curves

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介 UG\NX二次开发 连接曲线、连结曲线 UF_CURVE_auto_join_curves 效果 代码 #include "me.hpp" extern DllExport void ufusr(char* param, int* returnC…

白嫖在线云服务器,免费在 linux 服务器使用 docker 。 附视频+附文档

白嫖在线云服务器&#xff0c;免费在 linux 服务器使用 docker 。 附视频附文档 文章目录 前言启动 Nginx 案例最后 视频&#xff1a;https://www.bilibili.com/video/BV1WN411W79V/ 国内互联网经过多年发展&#xff0c;单体应用已经无法支持我们的互联网业务&#xff0c;分布…

“第五十一天”

无符号整数&#xff1a; 计算机硬件在进行无符号整数的加法时&#xff0c;从最低位开始&#xff0c;按位相加&#xff0c;并往更高位进位。 当进行减法时&#xff0c;被减数不变&#xff0c;减数全部按位取反&#xff0c;末位加一&#xff08;将一个正数变负&#xff0c;或者…

使用element-UI Cascader组件,实现第一级单选选,第二级,第三级,子级可以多选

最近开发过程中&#xff0c;遇到需求测一个需求&#xff0c;就是级联选择器&#xff0c;需要多选&#xff1b;但是第一级是单选&#xff1b; 既要单选又要复选。参照网上内容&#xff0c;自己整理了一下功能实现&#xff1b; 如下图&#xff1a; 思路&#xff1a;1.把第一层的…

卡巴斯基2009杀毒软件

下载地址&#xff1a;https://user.qzone.qq.com/512526231/main https://user.qzone.qq.com/3503787372/main

ROS学习记录2018.7.10

ROS学习记录2018.7.10 1.ROS基础了解 开源机器人操作系统ROS&#xff08;robot operation system&#xff09; 分级&#xff1a; 1.计算图集&#xff08;一种网络结构&#xff09; 1.节点&#xff1a;执行运算的进程&#xff08;做基础处理的单元&#xff09;2.消息&#x…

输入/输出应用程序接口和设备驱动程序接口

文章目录 1.输入/输出应用程序接口1.字符设备接口2.块设备接口3.网络设备接口1.网络设备套接字通信 4.阻塞/非阻塞I/O 2.设备驱动程序接口1.统一标准的设备驱动程序接口 1.输入/输出应用程序接口 1.字符设备接口 get/put系统调用:向字符设备读/写一个字符 2.块设备接口 read/wr…

Ubuntu环境下DOSBOX的配置

【步骤一】 先打开命令行&#xff0c;进入root模式&#xff0c;输入如下语句&#xff1a; sudo apt-get install dosbox 该语句的作用主要是安装dosbox 【步骤二】 安装完成之后&#xff0c;命令行输入dosbox 会进入dosbox页面&#xff1a; 【步骤三】 在你的主机中&…

淘宝app商品详情源数据API接口(解决滑块问题)可高并发采集

通过API接口采集淘宝商品列表和app商品详情遇到滑块验证码的解决方法&#xff08;带SKU和商品描述&#xff0c;支持高并发&#xff09;&#xff0c;主要是解决了高频情况下的阿里系滑块和必须要N多小号才能解决的反扒问题&#xff0c;以后都可以使用本方法&#xff1a; 大家都…