题解:ssy的队列

题目链接

题目描述

SSY是班集体育委员,总喜欢把班级同学排成各种奇怪的队形,现在班级里有 \(N\) 个身高互不相同的同学,请你求出这 \(N\) 个人的所有排列中任意两个相邻同学的身高差均不为给定整数 \(M\) 的倍数的排列总数。

输入格式

共三行:

第一行为 \(N\)

第二行为 \(N\) 个不同的整数

第三行为 \(M\)

输出格式

一行,为符合条件的排列总数(答案对 \(1234567891\) 取余数)。

输入样例

3

-1 0 1

2

输出样例

2

思路

先把题目转化一下:

给一些数和一个模数,这些数模上这个模数结果相同的分为一类

同类数不能相邻,问有多少种排列方式

易知同一类数的效果在序列中是一样的,可以将他们直接视为一种

差异只存在于数的大小不同,在最后乘上一个各个种类数字个数阶乘的乘积就行

设 \(f[i][k]\) 表示已经遍历到第 \(i\) 位,此时最后一个数字还剩下 \(k\) 个

可以用 hash 存每种颜色的状态,但是 map 套 vector 确实方便

转移的时候只用遍历每种状态的剩余种类进行转移就好

需要注意的是得钦定一个和 \(k\) 大小相同的种类为最后一个,不对它进行转移

代码

因为我的代码块会压成一行所以只能这样了

相关推荐
爱思德学术-IAAST1 个月前
【SCI/EI/SCOPUS/CNKI】第三届先进材料与装备制造国际会议(AMEM2024)
数据库·学习·制造·学术
一位很会的教授er~1 个月前
二项式定理(二项式展开)
学术
伊织code2 个月前
Nougat - 学术文档PDF解析(LaTeX数学、表格)
数学·pdf·解析·latex·表格·学术·nougat
anana_xu4 个月前
2024第二届智慧教育和人类发展国际会议(ICSEHD2024)
数据分析·国际会议·学术·教育·艺术
Amyniez5 个月前
R语言绘图:绘制横向柱状图
开发语言·数据分析·r语言·绘图·学术·ggplot2
熊猫小伙1 年前
zotero在不同系统的安装(win/linux)
linux·运维·服务器·学习方法·学术