1 条题解
-
0
简要思路
发掘性质:根据最长上升子序列的 dp 方程有 ,所以插入在 的数 必须保证 ,记录 。
分情况考虑:
1.存在 ,无解。
2.存在不止一个 ,无解。
3.只有一个 ,可以插入一个 以保证合法,但不一定一定要插到 的前一位,统计 前有多少个 满足 ,可以将 插到 后面。
4.没有 。可以随便插,基本答案即为 ,但是在如果在 左插入 或在 右插入 ,这两种方案得到的 相同,会重复计算,所以答案在最后还要减去 ,再加上插到最前面一个 的答案 ,最终答案为 。
代码
#include<bits/stdc++.h> using namespace std; int n,a[1000005],maxn[1000005],fl; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for(int i=1;i<n;i++)cin>>a[i]; for(int i=1;i<n;i++){ maxn[i]=max(maxn[i-1],a[i]); if(maxn[i-1]+2<a[i]){ cout<<0; return 0; }if(maxn[i-1]+2==a[i]){ if(fl){ cout<<0; return 0; }else fl=i; } } long long ans=0; if(fl){ for(int i=0;i<fl;i++){ if(maxn[i]==a[fl]-2)ans++; } cout<<ans; return 0; } for(int i=1;i<=n;i++){ ans+=maxn[i]+1; } ans-=n;ans++; cout<<ans; return 0; }
- 1
信息
- ID
- 8451
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者