神建模+dp——cf1236E
首先将两个人的所有可能的操作建立成一个模型:m+2行n列的矩阵
序列A对应图上的格子(i,Ai),第0行作为起点,最后一行作为终点,每个点可以向左下,下,右下走,每种可行的情况对应图上的一条路径
推出一个性质:对于第一行每个起点,其能到达的终点范围必定是一个连续的区间
那么我们只要求出每个起点能到达的范围[l,r],设第i个起点在向左下移动时被挡住L[i]步,那么其最后的位置是i+m+1-L[i]
考虑只向左走的情况,对于每个起点,当然是能向左走就向左走。除非在某一步被障碍物挡住了
考虑到上面的障碍作用更大(上面的障碍可能导致下面的障碍失效)所以自下往上考虑每个障碍物的影响
第i行的障碍物只会影响起点(0,A[i]+i),这个点被挡住了一步,那么L[i]可以先从L[i+1]继承状态,再+1,
因为第i个起点向左下被挡住,向下走到的那个点,等价于第i+1个点不被挡住时走到该行的状态,因为比第i+1个点多被挡住了一次,所以需要+1
#include <bits/stdc++.h>
using namespace std;
const int N=3e5+;
const int T=1e5;
#define ll long long
int n,m,a[N],L[N],R[N]; int main()
{
cin>>n>>m;
if(n==)return printf(""),;
for(int i=;i<=m;i++)scanf("%d",&a[i]);
for(int i=m;i>=;i--)
{
L[i+a[i]+T]=L[i+a[i]++T]+;
R[a[i]-i+T]=R[a[i]-i-+T]+;
}
ll ans=;
for(int i=;i<=n;i++)
{
int l=max(,i-(m+)+L[i+T]);
int r=min(n,i+(m+)-R[i+T]);
ans+=1ll*(r-l+);
}
cout<<ans;
return ;
}
神建模+dp——cf1236E的更多相关文章
- BZOJ-1189 紧急疏散evacuate BFS预处理+最大流+二分判定+神建模!!
绝世污题,垃圾题,浪费我一整天青春! 1189: [HNOI2007]紧急疏散evacuate Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1262 ...
- [Luogu5320][BJOI2019]堪破神机(DP+斯特林数)
https://www.cnblogs.com/cjyyb/p/10747543.html 特征方程+斯特林反演化简式子,要注意在模998244353意义下5没有二次剩余,所以每个数都要用$a+b\s ...
- ECF R9(632E) & DP
Description: 给你$n$个数可以任取$k$个(可重复取),输出所有可能的和. $n \leq 1000,a_i \leq 1000$ Solution: 好神的DP,我们排序后把每个数都减 ...
- 【DP】组合数字
Password Attacker 题意就是给 M 个关键字,组合成 N 字符长度的结果,每一个关键字都必须在 N 位的字符中出现,有多少种可能结果. 范围 1 ≤ M ≤ N ≤ 100. 举例假设 ...
- 【CF889E】Mod Mod Mod DP
[CF889E]Mod Mod Mod 题意:给你一个序列$a_1,a_2...a_n$,定义$f(x,n)=x\mod a_n$,$f(x,i)=x\mod a_i+f(x \mod a_i,i+1 ...
- 【20181031T2】几串字符【数位DP思想+组合数】
题面 [错解] 一眼数位DP 设\(f(i,c00,c01,c10,c11)\)-- 神tm DP 哎好像每两位就一定对应c中的一个,那不用记完 所以可以设\(f(i,c00,c01,c10)\)-- ...
- BZOJ3195: [Jxoi2012]奇怪的道路【状压DP】
Description 小宇从历史书上了解到一个古老的文明.这个文明在各个方面高度发达,交通方面也不例外.考古学家已经知道,这个文明在全盛时期有n座城市,编号为1..n.m条道路连接在这些城市之间,每 ...
- bzoj 1068: [SCOI2007]压缩【区间dp】
神区间dp 设f[l][r][0]为在l到r中压缩的第一个字符为M,并且区间内只有这一个M,f[l][r][0]为在l到r中压缩的第一个字符为M,并且区间内有两个及以上的M 然后显然的转移是f[i][ ...
- 基础数位DP小结
HDU 3555 Bomb dp[i][0] 表示含 i 位数的方案总和. sp[i][0] 表示对于位数为len 的 num 在区间[ 10^(i-1) , num/(10^(len-i)) ] 内 ...
随机推荐
- 【MVC】Spring WebFlux
一.什么是 Spring WebFlux 下图截自 Spring Boot 官方网站: 结合上图,在了解 Spring WebFlux 之前,我们先来对比说说什么是 Spring MVC,这更有益我们 ...
- epoll学习(二)
首先看程序一,这个程序想要实现的功能是当用户从控制台有任何输入操作时,输出”hello world!”. l 程序一 #include <unistd.h> #include <io ...
- python基础四(文件操作)
1.文件操作的基本流程 1.1 文件操作的基本流程 # 绝对路径 # r"d:/葫芦娃.txt 前面的r 为转义. linux平台和windows的分隔符不同 f = open(r" ...
- hasvalue vs !=null
Which is preferred: Nullable<T>.HasValue or Nullable<T> != null? The compiler replaces n ...
- python 反转列表的3种方式
转载自:https://blog.csdn.net/bookaswine/article/details/42468735 方式一:使用reversed()函数 a=[1,2,3,4,5,6,7,8, ...
- [转载]真正的inotify+rsync实时同步 彻底告别同步慢
原文链接http://www.ttlsa.com/web/let-infotify-rsync-fast/ 背景我们公司在用inotify+rsync做实时同步,来解决分布式集群文件一致性的问题.但当 ...
- upc组队赛12 Cardboard Container【枚举】
Cardboard Container Problem Description fidget spinners are so 2017; this years' rage are fidget cub ...
- centos 7 安装mysql5.7
1.进入到要存放安装包的位置 cd /home/lnmp 2.查看系统中是否已安装 MySQL 服务,以下提供两种方式: rpm -qa | grep mysql yum list installed ...
- tire 树入门
博客: 模板: 前缀是否出现: /* trie tree的储存方式:将字母储存在边上,边的节点连接与它相连的字母 trie[rt][x]=tot:rt是上个节点编号,x是字母,tot是下个节点编号 * ...
- SpringCloud-技术专区-Hystrix-使用指南
Maven依赖配置 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId ...