2023.9.27测试
T1 [ABC311F] Yet Another Grid Task
what??
发现一个点染了黑色后它下面会将一个三角形染成黑色,画个图发现按列考虑比较好
设
可以用后缀和优化做到
code
#include<bits/stdc++.h>
using namespace std;
const int N=2010,MOD=998244353;
int n,m,top[N],f[N][N],ans;
char s[N][N];
int main()
{
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++)
scanf("%s",s[i]+1);
for(int j=1; j<=m; j++)
{
top[j]=n+1;
for(int i=1; i<=n; i++)
{
if(s[i][j]=='#')
{
top[j]=i;
break;
}
}
}
f[0][n+1]=1;
for(int i=1; i<=m; i++)
{
int tmp=f[i-1][n+1];
for(int j=n+1; j>=1; j--)
{
(tmp+=f[i-1][j-1])%=MOD;
f[i][j]=tmp;
}
for(int j=top[i]+1; j<=n+1; j++)
f[i][j]=0;
}
for(int i=1; i<=top[m]; i++)
(ans+=f[m][i])%=MOD;
printf("%d",ans);
return 0;
}
T2 子序列
忘记是哪道原题了
T3 字符串
给定一个原串
gj 说这是道典题。考虑枚举断点
这时我们又发现,对于两个相同但出现位置不一样的子序列,我们很容易重复计算。于是我们用类似最小表示法的思想,要求选出的子序列必须是“最小的”,这样就避免重复计算。
对于每个位置,预处理出在它右边的第一个字符
code
#include<bits/stdc++.h>
using namespace std;
const int N=110,MOD=998244353;
int n,f[N][N],g[N][N],ans;
char s[N];
vector <int> pos[30];
int main()
{
freopen("str.in","r",stdin);
freopen("str.out","w",stdout);
scanf("%s",s+1); n=strlen(s+1);
for(int i=1; i<=n; i++)
pos[s[i]-'a'+1].push_back(i);
for(int i=1; i<=26; i++)
pos[i].push_back(n+1);
for(int i=1; i<=26; i++)
for(int j=0; j<=n; j++)
g[i][j]=*upper_bound(pos[i].begin(),pos[i].end(),j);
for(int i=1; i<=n; i++)
{
memset(f,0,sizeof(f));
f[0][i]=1;
for(int j=0; j<i; j++)
{
for(int k=i; k<=n; k++)
{
if(!f[j][k])
continue;
for(int c=1; c<=26; c++)
(f[g[c][j]][g[c][k]]+=f[j][k])%=MOD;
}
}
for(int j=i+1; j<=n; j++)
(ans+=f[i][j])%=MOD;
}
printf("%d\n",ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?