P7444-「EZEC-7」猜排列【dp】
正题
题目链接:https://www.luogu.com.cn/problem/P7444
题目大意
一个长度为\(n\)的排列,已知每个\(c_i\)表示那个排列中\(mex\)为\(i\)的区间个数。求满足条件的排列个数
\(1\leq n\leq 5\times 10^5,c_i\geq 0,\sum_{i=1}^nc_i=\frac{n(n+1)}{2}-1\)
解题思路
考虑一个朴素的\(dp\),设\(f_{i,l,r}\)表示加入了\(1\sim i\),然后最大区间是\([l,r]\)时的方案。
那么每次插入一个数\(i\)的时候如果\(c_i=0\)那么它一定在目前的最大区间里,否则需要扩展到区间外,每次有往左或者往右扩展。
不难发现对于\(1\sim i\)扩展到\(l\),那么\(r\)是固定的,所以我们可以直接用\(f_{i,l}\)来表示状态,但是这样还是\(O(n^2)\)的,其实状态数比较少的,因为对于一个\(i\)来说需要扩展的\(a_i\)都是一些倍数形的。
其实总状态数不会超过\(\sum_{i=1}^n\sqrt{a_i}\),因为上限很难到,所以用个\(vector\)记录一下状态就能够过了
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define ll long long
using namespace std;
const ll N=5e5+10,P=998244353;
ll n,a[N],f[2][N],ed[2][N],vis[N];
vector<int> v[2];
signed main()
{
scanf("%lld",&n);
for(ll i=0;i<n;i++)
scanf("%lld",&a[i]);
ll Ans=0,s=0;
for(ll i=1;i<=n;i++){
ll l=i-1,r=n-i;
if(l*(l+1)+r*(r+1)==a[0]*2)
s=i,Ans++;
}
if(!Ans)return puts("0")&0;
f[0][s]=1;ed[0][s]=s;v[0].push_back(s);
for(ll i=1;i<n-1;i++){
v[i&1].clear();
for(ll p=0;p<v[~i&1].size();p++){
ll l=v[~i&1][p],r=ed[~i&1][l];
if(vis[l]==i)continue;vis[l]=i;
if(!a[i]){
if(r-l-i<0)continue;
(f[i&1][l]+=f[~i&1][l]*(r-l-i+1)%P)%=P;
ed[i&1][l]=r;v[i&1].push_back(l);
}
else{
ll lk=l,rk=n-r+1;
if(a[i]%lk==0){
ll nr=r+a[i]/lk;
(f[i&1][l]+=f[~i&1][l])%=P;
ed[i&1][l]=nr;v[i&1].push_back(l);
}
if(a[i]%rk==0){
ll nl=l-a[i]/rk;
(f[i&1][nl]+=f[~i&1][l])%=P;
ed[i&1][nl]=r;v[i&1].push_back(nl);
}
}
}
for(ll p=0;p<v[~i&1].size();p++)
f[~i&1][v[~i&1][p]]=0;
}
ll ans=0;
for(ll i=1;i<=n;i++)
(ans+=f[(n-2)&1][i])%=P;
printf("%lld\n",ans*Ans%P);
return 0;
}
P7444-「EZEC-7」猜排列【dp】的更多相关文章
- 「学习笔记」wqs二分/dp凸优化
[学习笔记]wqs二分/DP凸优化 从一个经典问题谈起: 有一个长度为 \(n\) 的序列 \(a\),要求找出恰好 \(k\) 个不相交的连续子序列,使得这 \(k\) 个序列的和最大 \(1 \l ...
- LOJ 2292 「THUSC 2016」成绩单——区间DP
题目:https://loj.ac/problem/2292 直接 DP 很难做,主要是有那种 “一个区间内部有很多个别的区间” 的情况. 自己想了一番枚举 max-min 的最大限制,然后在该基础上 ...
- 「算法笔记」状压 DP
一.关于状压 dp 为了规避不确定性,我们将需要枚举的东西放入状态.当不确定性太多的时候,我们就需要将它们压进较少的维数内. 常见的状态: 天生二进制(开关.选与不选.是否出现--) 爆搜出状态,给它 ...
- 「学习笔记」斜率优化dp
目录 算法 例题 任务安排 题意 思路 代码 [SDOI2012]任务安排 题意 思路 代码 任务安排 再改 题意 思路 练习题 [HNOI2008]玩具装箱 思路 代码 [APIO2010]特别行动 ...
- 「状压DP」「暴力搜索」排列perm
「状压DP」「暴力搜索」排列 题目描述: 题目描述 给一个数字串 s 和正整数 d, 统计 sss 有多少种不同的排列能被 d 整除(可以有前导 0).例如 123434 有 90 种排列能被 2 整 ...
- 洛谷比赛 「EZEC」 Round 4
洛谷比赛 「EZEC」 Round 4 T1 zrmpaul Loves Array 题目描述 小 Z 有一个下标从 \(1\) 开始并且长度为 \(n\) 的序列,初始时下标为 \(i\) 位置的数 ...
- LOJ #2540. 「PKUWC 2018」随机算法(概率dp)
题意 LOJ #2540. 「PKUWC 2018」随机算法 题解 朴素的就是 \(O(n3^n)\) dp 写了一下有 \(50pts\) ... 大概就是每个点有三个状态 , 考虑了但不在独立集中 ...
- LOJ #2542. 「PKUWC 2018」随机游走(最值反演 + 树上期望dp + FMT)
写在这道题前面 : 网上的一些题解都不讲那个系数是怎么推得真的不良心 TAT (不是每个人都有那么厉害啊 , 我好菜啊) 而且 LOJ 过的代码千篇一律 ... 那个系数根本看不出来是什么啊 TAT ...
- LOJ #2802. 「CCC 2018」平衡树(整除分块 + dp)
题面 LOJ #2802. 「CCC 2018」平衡树 题面有点难看...请认真阅读理解题意. 转化后就是,给你一个数 \(N\) ,每次选择一个 \(k \in [2, N]\) 将 \(N\) 变 ...
随机推荐
- 莫逸风CSDN文章目录
『Ⅱ』-----随笔 莫逸风CSDN文章目录 The Programmer's Oath程序员的誓言-- 今天突发奇想写了一个小工具,CSDN文章目录生成器 vue去掉一些烦人的校验规则 输入npm ...
- 刷题-力扣-1137. 第 N 个泰波那契数
1137. 第 N 个泰波那契数 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/n-th-tribonacci-number 著作权 ...
- python3使用pycuda执行简单GPU计算任务
技术背景 GPU的加速技术在深度学习.量子计算领域都已经被广泛的应用.其适用的计算模型是小内存的密集型计算场景,如果计算的模型内存较大,则需要使用到共享内存,这会直接导致巨大的数据交互的运算量,通信开 ...
- “类型思维”之Typescript,你掌握了吗?
(一)背景 JavaScript是一门动态弱类型语言 对变量的类型非常宽容 而且不会在这些变量和它们的调用者之间建立结构化的契约. 试想有这么几个场景: 1: 你调用一个别人写的函数,但是这个人没有写 ...
- C# - 习题02_写出程序的输出结果a.Fun()
时间:2017-08-23 整理:byzqy 题目:写出程序的输出结果: 文件:Program.cs 1 using System; 2 3 namespace Interview1 4 { 5 pu ...
- MySQL-SQL基础-子查询
#子查询-某些情况下,当进行查询的时候,需要的条件是另外一个select语句的结果,这个时候就要用到子查询.用于子查询的关键字主要包括: in.not in.=.!=.exists.not exist ...
- GUI容器之布局管理器
布局管理器 布局管理器:frame.setLayout(); 默认值为new flowLayout() 流式布局 frame.setLayout(new FlowLayout(FlowLayout.R ...
- golang error错误处理
error定义 数据结构 go语言error是一普通的值,实现方式为简单一个接口. // The error built-in interface type is the conventional i ...
- 安装和配置CloudWatchAgent
文章原文 使用 CloudWatch 代理收集指标和日志 下载 CloudWatch 代理软件包 sudo yum install amazon-cloudwatch-agent 点击查看其他平台软件 ...
- Structs2的作用是什么??
struts2是一种重量级的框架,位于MVC架构中的controller,可以分析出来,它是用于接受页面信息然后通过内部处理,将结果返回. 同时struts2也是一个web层的MVC框架,那么什么是s ...