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

2026牛客暑期多校联赛第三场F题赛后补题记录

题目大意

给定一个n×mn×mn×m的网格。你需要在每个格子中填入0、1、20、1、2012中的一个整数。
如果任意两个共享一条边的格子填有不同的整数,则称该填法为好的。
输出好的填法数对998244353998244353998244353取模的结果。
nnnmmm(1≤n<10,1≤m<998244353)(1≤n<10,1≤m<998244353)(1n<101m<998244353)

初步思路

首先观察到本题如果使用线性dpdpdp进行求解mmm的范围实在太大无法在规定时间内求解 但是注意到nnnmmm的数据量差异巨大 因此想到可以使用矩阵快速幂状压dpdpdp从而求解

具体思路

  1. 因为nnn范围极小因此可以按照一列一列进行处理数据 从而dpdpdp但由于3∗2n−13*2^{n-1}32n1n=9n=9n=9时过大 无法使用矩阵快速幂进行优化 因此考虑对每一种的数字排布进行状态压缩
  2. 可以先打表打出n=3n=3n=3时 每一列的状态都有哪些(这里地方太小了 列不下) 观察发现 所有的数字排布总是遵循ABA或ABC的形式 进一步思考 我们可以发现n>3n>3n>3时 所有数字的排布会以p[i]=p[i−2]和p[i]!=p[i−2]p[i]=p[i-2]和p[i]!=p[i-2]p[i]=p[i2]p[i]!=p[i2]区分开来 因此 我们可以将数字的分布状态按照分布规律进行状态压缩 最后可以使得当n=9n=9n=9时 矩阵的大小不超过160021600^216002可以进行矩阵快速幂(矩阵为MMM
  3. 在确认状态压缩后 即可开始分析 每一种状态如何从不同状态间转移 由于每一种状态的具体排布之间的转移和状态间的转移总是相同我们可以把所有的状态都抽出来一个具体排布 和其他类型的所有排布进行比较 记录能够转移的具体状态数然后由状态转移方程dp[i]=dp[i−1]×Mdp[i]=dp[i-1]×Mdp[i]=dp[i1]×M不难发现 每一次转移 实际上等同于矩阵进行多次乘法 因此 我们可以使用矩阵快速幂来进行优化
  4. adp=dp×Mm−1adp=dp×M^{m-1}adp=dp×Mm1最后统计adpadpadp的所有状态此时的状态数 输出即可

总结

这题好难啊 好难好难啊 以前根本没有接触过矩阵快速幂 很少接触状压dp 因此赛时根本没有看出一点眉目 费了牛鼻子劲打表后 发现根本找不出规律 赛后疯狂学习 最后耗时4h左右终于ac这题呜呜呜呜呜呜呜呜呜

代码展示

#include<bits/stdc++.h>usingnamespacestd;#defineintlonglong#defineendl'\n'intlen,mod=998244353,n,m,dp[2000500];queue<deque<int>>q[1050];structmatrix{intc[150][150];matrix(){for(inti=1;i<=len;i++)for(intj=1;j<=len;j++)c[i][j]=0;}voidprint(){for(inti=1;i<=len;i++){for(intj=1;j<=len;j++)cout<<c[i][j]<<" ";cout<<endl;}}}M;matrixoperator*(constmatrix&x,constmatrix&y){matrix temp;for(inti=1;i<=len;i++)for(intj=1;j<=len;j++)for(intk=1;k<=len;k++)temp.c[i][j]=(temp.c[i][j]+x.c[i][k]*y.c[k][j])%mod;returntemp;}matrixquickpow1(matrix a,intk){matrix res;for(inti=1;i<=len;i++)res.c[i][i]=1;while(k){if(k&1)res=res*a;a=a*a;k>>=1;}returnres;}intquickpow2(inta,intk){intres=1;while(k){if(k&1)res=(res%mod*a%mod)%mod;a=(a*a)%mod;k>>=1;}returnres;}voiddfs(intnow,intlast,deque<int>dq){if(now==n+1){intres=0;// cout << dq[0] << " " << dq[1] << " ";for(inti=2;i<n;i++){if(dq[i-2]==dq[i])res+=(1LL<<(i-2));// cout << dq[i] << " ";}// cout << endl;q[res].push(dq);return;}for(inti=0;i<=2;i++)if(i!=last){dq.push_back(i);dfs(now+1,i,dq);dq.pop_back();}}voidsolve(){for(inti=0;i<len;i++)for(intj=0;j<len;j++){autot=q[i].front();intneed=0;queue<deque<int>>tt;while(q[j].size()){autotemp=q[j].front();tt.push(temp);q[j].pop();intsz=temp.size();boolflag=false;for(intk=0;k<sz;k++)if(temp[k]==t[k]){flag=true;break;}if(!flag)need++;}M.c[i+1][j+1]=need;while(tt.size()){autotemp=tt.front();tt.pop();q[j].push(temp);}}// M.print();intsz=q[0].size();for(inti=1;i<=len;i++)dp[i]=sz;matrix temp=quickpow1(M,m-1);intans=0,adp[2000]={0};for(inti=1;i<=len;i++){for(intj=1;j<=len;j++)adp[i]=(adp[i]%mod+dp[j]*temp.c[j][i]%mod)%mod;ans=(ans%mod+adp[i]%mod)%mod;}cout<<ans;}signedmain(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n>>m;if(n==1)cout<<3*quickpow2(2,m-1)%mod;elseif(n==2)cout<<(2*quickpow2(3,m)%mod)%mod;else{len=1LL<<(n-2);deque<int>temp;dfs(1,-1,temp);solve();}return0;}
http://www.jsqmd.com/news/1265481/

相关文章:

  • AM261x MCSPI FIFO模式与UART多协议通信深度解析
  • 邢台太行山东麓房屋漏水怎么办?2026本地防水施工特点与团队选择 - 雨婺虹房屋维修
  • Cocos引擎大场景植被渲染优化:实例化与LOD技术实战解析
  • AI自主发明工具:TTE框架重塑科学研究新范式
  • 从零构建C++高性能服务器框架:TcpServer模块设计与实现
  • YimMenu:GTA5终极安全防护与游戏增强完整指南
  • UEViewer:独立解析与导出Unreal Engine资源的第三方工具指南
  • OpenClaw开源AI框架:从对话到任务执行的革命
  • 2026年7月洗钢片玻璃清洗机/镜片玻璃清洗机制造厂家_佛山市万玻玻璃机械有限公司 - 品牌宣传支持者
  • RAGFlow开源框架:构建高效智能问答系统的实践指南
  • AI技术栈重构:LangGraph与RAGFlow提升智能问答系统性能
  • 容器化MySQL主从复制故障排查与优化指南
  • Windows任务管理器进程详解:安全优化与系统资源释放
  • 如何彻底解决Windows无法预览iPhone HEIC照片的终极指南
  • AI应用价值闭环:从Token成本控制到业务价值转化的实战策略
  • Kubernetes资源配额与RBAC访问控制实战指南
  • 2026年7月佛山不锈钢线条地板出风口/佛山不锈钢风口公司推荐榜单_佛山市广利通风设备有限公司 - 行业平台推荐
  • Unity游戏开发集成Ulid:高性能分布式ID生成方案实践指南
  • 管理学论文降AI工具免费推荐:2026年管理学毕业论文降AI4.8元知网达标完整指南
  • HS2-HF Patch终极指南:如何快速解决HoneySelect2语言障碍和MOD兼容性问题
  • 怎样把论文 AI 率从 80% 降到 10% 以内?免费改写技巧
  • 华为OD机试真题解析:图像物体边界检测算法与多语言实现
  • C++调试信息控制:预处理指令与条件编译实战指南
  • TI雷达硬件加速器寄存器配置与安全机制实战解析
  • Spring AI与Gemma 4构建企业级RAG知识库实战
  • Caveman 部署与使用完全手册(Windows + Claude Code)
  • OMAP4470处理器架构解析:异构计算与移动SoC设计的先驱
  • Linux虚拟地址空间原理与内存管理详解
  • VR应用上线避坑指南:PICO与Quest平台开发实战经验总结
  • Skywork天工桌面版:Windows原生AI生产力工具全解析