专栏文章
题解:AT_s8pc_4_e Enormous Atcoder Railroad
AT_s8pc_4_e题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mio13nuj
- 此快照首次捕获于
- 2025/12/02 11:38 3 个月前
- 此快照最后确认于
- 2025/12/02 11:38 3 个月前
AT_s8pc_4_e Enormous Atcoder Railroad 题解
知识点
DP。
分析
表示长度为 的区间,左边到原点距离为 ,右边到原点距离为 时方案数为多少。发现只需要求满足 的状态即可,那么有如下转移:
我们简化一下状态,设 ,转移变为下式:
前缀和优化即可 解决。最后统计答案为:
优化
发现空间太大,时间常数也太大,考虑把后两维 一起滚动数组压掉,空间剩下 ,时间常数极小。
代码
CPPconstexpr int N(1e4+10),M(2.5e3+10);
int n,m,X,ans,lim;
int a[M],f[N];
signed main() {
/*DE("Input");*/
I(n,m,X);
if(m-1>X)return puts("0"),0;
FOR(i,0,m-1)I(a[i]);
FOR(i,0,m-2)tomax(lim,a[i+1]-a[i]);
/*DE("DP");*/
ans=1;
DOR(j,X,0) {
if(j<X) {
DOR(i,lim,1) {
f[i]=add(f[i-1],i<=2*(X-j));
if(2*(X-j)<i)toadd(f[i],Mod-f[i-2*(X-j)-1]);
}
if(j<=m-2)tomul(ans,f[a[j+1]-a[j]]);
FOR(i,1,lim)toadd(f[i],f[i-1]);
}
if(j>0) {
DOR(i,lim,1) {
f[i]=add(f[i-1],i<=2*(X-j)+1);
if(2*(X-j)<i)toadd(f[i],Mod-f[i-2*(X-j)-1]);
}
FOR(i,1,lim)toadd(f[i],f[i-1]);
}
}
/*DE("Output");*/
O(ans,'\n');
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...