[ABC259Ex] Yet Another Path Counting
#
[ABC259Ex] Yet Another Path Counting
题外话#
-
淀粉质题单做不动了怎么办?来做一道根号题振奋一下精神吧/se!
-
我要饿死了,我要吃饭,以后在学校还是不要不吃早饭了/kk
题意#
给一个
每一步只能往右或者往下走,问有多少条路径的起点和终点的颜色相同,对
题解#
不同颜色的统计互不干扰,所以按颜色分开来统计。
考虑有用的信息只有起点和终点的颜色,所以枚举点对,组合数计算贡献,即
发现如果同种颜色的点数过大的话这个做法会 G。并且很难维护合并组合数的计算来降低复杂度。
但是点数有一个限制,即所有颜色的点数加起来为
设置阈值
当
考虑,这个暴力做法时间复杂度的正确性应该是不依赖于
所以考虑
转移很简单:
于是每个位置
然后就做完了。取
代码非常简单。(由于不怎么习惯用大量的
#
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define il inline
#define re register
const int N=405,T=400,mod=998244353;
int n,a[N][N],ans,fac[N<<1],inv[N<<1],invfac[N<<1],f[N][N];
#define pii pair<int,int>
#define mp make_pair
vector<pii >v[N*N];
il int read(){
re int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+(c^48),c=getchar();
return x*f;
}
il void Add(int &x,int y){
x=(x+y)%mod;
}
il int C(int n,int m){
if(n<0||m<0||n<m)return 0;
return fac[n]*invfac[m]%mod*invfac[n-m]%mod;
}
il bool cmp(pii x,pii y){
return y.first>=x.first&&y.second>=x.second;
}
il int disx(pii x,pii y){
return y.first-x.first;
}
il int disy(pii x,pii y){
return y.second-x.second;
}
#define nowi v[col][i]
#define nowj v[col][j]
il void solve1(int col){
int siz=(int)v[col].size();
for(re int i=0;i<siz;i++)
for(re int j=i;j<siz;j++)
if(cmp(nowi,nowj))Add(ans,C(disx(nowi,nowj)+disy(nowi,nowj),disx(nowi,nowj)));
}
il void solve2(int col){
for(re int i=1;i<=n;i++)
for(re int j=1;j<=n;j++){
f[i][j]=(f[i-1][j]+f[i][j-1]+(a[i][j]==col))%mod;
if(a[i][j]==col)Add(ans,f[i][j]);
}
}
il void GetInv(){
inv[1]=fac[1]=invfac[1]=fac[0]=invfac[0]=1;
for(re int i=2;i<=(n<<1);i++){
inv[i]=inv[mod%i]*(mod-mod/i)%mod;
fac[i]=fac[i-1]*i%mod;
invfac[i]=invfac[i-1]*inv[i]%mod;
}
}
signed main(){
n=read();
GetInv();
for(re int i=1;i<=n;i++)
for(re int j=1;j<=n;j++)
a[i][j]=read(),v[a[i][j]].push_back(mp(i,j));
for(re int col=1;col<=n*n;col++){
if(v[col].empty())continue;
if((int)v[col].size()<=T)solve1(col);
else solve2(col);
}
cout<<ans;
return 0;
}
分类:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)