[ABC378G] Everlasting LIDS

news/2024/11/15 14:35:00/文章来源:https://www.cnblogs.com/archer233/p/18547922

原题链接
\(该题运用到了杨表的知识 发该篇题解是为了加深对于杨表的理解\)
\(发表该篇题解仅用于个人理解 感觉洛谷上的题解更好\)
洛谷题解传送门
\(杨氏矩阵(Young tableau),又名杨表,是一种常用于表示论和舒伯特演算中的组合对象。\)
\(杨表是一种特殊的矩阵。它便于对称群和一般线性群的群表示和性质研究。\)
\(杨表由剑桥大学数学家阿尔弗雷德·杨(Alfred Young)于 1900 年首次提出,于 1903 年被德国数学家弗罗贝尼乌斯(Ferdinand Georg Frobenius)应用于对称群的研究。\)
\(杨表有一个基础的概念\)
\(对于1-n的元素填充 它的各行各列都得满足递增\)
\(臂长:对于每个单元格向右的元素个数(不包含自己)\)
\(腿长:对于每个单元格向下的元素个数(不包含自己)\)
\(勾长:对于每个单元格的臂长+腿长加一(即向右元素个数+向下元素个数+自己)\)
\(性质:\)
\(第一行的长度为该序列的LIS长度\)
\(第一列的长度为该序列的LDS长度\)
\(一个确定的序列可以生成两张杨表 一张记录其第一次插入的顺序 一张记录其形成的标准杨表\)
\(code:\)

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define pb push_back
#define pii pair<int,int>
using namespace std;
//const int mod=998244353;
int mod;
int gcd(int a,int b){return b?gcd(b,a%b):a;};
int qpw(int a,int b){int ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod,b>>=1;}return ans;}
int inv(int x){return qpw(x,mod-2);}
const int N=2e5+10;
int f[N],deg[N],siz[N];
vector<int>G[N];
int find(int x){return f[x]==x?x:f[x]=find(f[x]);
}
void dfs1(int x,int fa){for(int son:G[x]){if(son==fa)continue;dfs1(son,x);if(deg[x]==2&&deg[son]==3){siz[find(son)]++;}else if(deg[son]==2&&deg[x]==3){siz[find(x)]++;}else if(deg[son]==3&&deg[x]==3){siz[find(x)]+=siz[find(son)];f[find(son)]=find(x);}}
}
void solve(){int n,m;cin>>n>>m>>mod;int ans=1;for(int i=1;i<=n*m;i++)ans=ans*i%mod;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){ans=ans*inv(i+j-1)%mod;}}map<vector<int>,int>dp;vector<int>ve;for(int i=1;i<=m;i++)ve.pb(0);dp[ve]=1;for(int k=1;k<=n*m;k++){map<vector<int>,int>ndp;for(auto x:dp){auto v=x.first;auto val=x.second;for(int i=0;i<m;i++){if(v[i]<n&&(i==0||v[i]<v[i-1])){if(i!=m-1&&v[i]==n-1&&v[i+1]<n-1)continue;++v[i];ndp[v]=(ndp[v]+val)%mod;--v[i];}}}swap(dp,ndp);}for(int i=0;i<m;i++)ve[i]=n;ans=ans*dp[ve]%mod;cout<<ans;
}
signed main(){ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);int _=1;
//    cin>>_;while(_--)solve();
}

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

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

相关文章

数据采集第四次作业

代码链接:第四次数据采集实践作业码云链接 作业① 1 作业要求熟练掌握 Selenium 查找HTML元素、爬取Ajax网页数据、等待HTML元素等内容。 使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。 候选网站:东方财富网:…

使用css 画三角形的三种方法

使用纯css 绘制三角形 方法一 使用边框实现先实现一个div 四个粗边框 不同颜色 保留左右和下边框 设置左右边框为颜色为 transparent<body><div class="div1"></div><div class="div2"></div> <div class="div3&…

代码分析工具小结

本文介绍了用于C++代码的分析工具,包括3款静态分析工具和3款动态分析工具。此文总结在平时开发过程中使用到的代码分析工具,分为静态分析和动态分析两个部分,本文只介绍Windows平台的工具。 静态代码分析 CppCheck CppCheck是一款经典的C/C++静态代码检查工具,笔者最开始使…

成为行动上的巨人

总是看到别人的微博,有学习到,有被感到到,有醍醐灌顶到,也有被大开脑洞的时候。今天有了自己的博客,记录学习中的点点滴滴,也希望自己不再是只在知识的边缘磨磨蹭蹭, 而是挖掘进去,进而能够知其然又知其所以然。希望笔记成为自己知识的沉淀和积累,也希望 能够帮助到那…

a-modal打开页面报错Ancestor with aria-hidden

报错信息Blocked aria-hidden on an element because its descendant retained focus. The focus must not be hidden from assistive technology users. Avoid using aria-hidden on a focused element or its ancestor. Consider using the inert attribute instead, which w…

线程状态切换

Java线程控制方法的作用及其区别:start:作用:启动线程,由虚拟机自动调度执行run()方法。 区别:线程处于就绪状态。run:作用:线程逻辑代码块处理,JVM调度执行。 区别:线程处于运行状态。sleep:作用:让当前正在执行的线程休眠(暂停执行)。 区别:不释放锁。wait:作用:…

AI智能检测视频分析网关安全帽检测识别监控解决方案

在当代建筑行业中,保障工人的安全始终是最为紧迫的议题。事故如高空坠落和物体撞击等频繁发生,严重威胁着工人的生命安全。安全帽作为一项基础的个人防护设备,其正确使用对于减轻事故伤害起着至关重要的作用。 不过,依赖传统的人工检查方法不仅效率不高,还可能存在疏漏和错…

制造企业的数字化转型:五款优秀项目管理软件推荐

制造业的生产管理往往涉及复杂的流程和多部门协作,如何确保各环节顺利对接、信息准确传递,是每一家制造企业都在不断优化的问题。面对这些管理难题,越来越多的制造企业引入了项目管理软件,通过直观的任务分配、进度跟踪、数据反馈等功能,极大地提升了生产效率和团队协作质…

React Router 的实现原理

本文分两部分,一说前端路由的基本原理,二说 React Router 的实现原理 前端路由的基本原理​ 不说屁话,从时间线上讲,Web 应用原本是后端渲染,后来随着技术的发展,有了单页面应用,慢慢从后端渲染发展成前端渲染 在博客前端路由hash、history的实现 一问中我已经介绍过这两…

[TJOI2007] 路标设置

[[TJOI2007] 路标设置(https://www.luogu.com.cn/problem/P3853) 题目 B 市和 T 市之间有一条长长的高速公路,公路上相邻路标的最大距离定义为该公路的“空旷指数”。现在公路上增设一些路标,使得公路的“空旷指数”最小。请设计一个程序计算能达到的最小值是多少。请注意,公…

TBM810-ASEMI贴片桥堆8A 1000V

TBM810-ASEMI贴片桥堆8A 1000V编辑:ll TBM810-ASEMI贴片桥堆8A 1000V 型号:TBM810 品牌:ASEMI 封装:TBM-4 特性:贴片桥堆 正向电流:8A 反向耐压:1000V 恢复时间:>2000ns 引脚数量:4 芯片个数:4 芯片尺寸:50MIL 浪涌电流:50A 漏电流:>10uA 工作温度:-55℃~150…

Python开发环境搭建(PyCharm+Anaconda+Git+Gitee)

一、Anaconda介绍 1.1 为什么选择Anaconda? Anaconda是一个开源的Python发行版本,主要用于数据科学和机器学习,它包含了Python、conda以及众多工具和库,让我们可以轻松的构建和管理python虚拟环境,方便的进行python项目开发。下面是选择Anaconda的理由:安装简单方便 便捷…