思路:

我们首先处理出每个位子需要被多少个区间覆盖才能变成 \(h\) 。即 $a_i=h-a_i $

同时设定 \(b\) 序列为 \(a\) 序列的差分系列

如果 \(b_i==1\) ,很显然,此时需要多设立一个 \(l\) 在位子 \(i\) 处 。那么我们过程维护一下需要设立 \(l\) 的个数 $ cnt$ ,此时 \(cnt\gets cnt+1\)

如果 \(b_i==0\) ,很显然,位子 \(i\) 可能有两种情况:

  1. 这个位子什么都没有。

  2. 这个位子有一个 \(l\) ,也有一个 \(r\) 那么对于这个位子 \(i\) ,如果有 \(r\) 的话,我们可以对之前的 \(cnt\) 个 \(l\) 进行匹配,当然也可以对当前位子的这个 \(l\) 进行匹配 ,那么 \(ans\gets ans*(cnt+1)\)

如果 \(b_i=-1\) ,很显然 ,此时需要多设立一个 \(r\) 在位子 \(i\) 处,那么我们要在之前的 \(cnt\) 个 \(l\) 中选择一个和它进行匹配,那么 \(ans\gets ans*cnt\) ,同时 \(cnt \gets cnt-1\)

代码实现:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD=1e9+7;
const int tmax=2005;
int n,h,a[tmax];
ll ans,num;
int main()
{
scanf("%d%d",&n,&h);
int i;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]>h) return puts("0"),0;
}
if(h-a[1]>1||h-a[n]>1) return puts("0"),0;
num=h-a[1];
ans=1;
a[++n]=h;
for(i=2;i<=n;i++)
{
if(abs(a[i]-a[i-1])>1) return puts("0"),0;
if(a[i]-a[i-1]==1)
{
ans=(ans*num)%MOD;
num--;
}
else if(a[i]-a[i-1]==-1)
num++;
else
ans=(ans*(num+1))%MOD;
}
printf("%d",ans);
return 0;
}

CF466D题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. 特斯拉Tesla Model 3整体架构解析(上)

    特斯拉Tesla Model 3整体架构解析(上) 一辆特斯拉 Model 3型车在硬件改造后解体 Sensors for ADAS applications 特斯拉 Model 3型设计的传感器组件 ...

  2. NVIDIA TensorRT高性能深度学习推理

    NVIDIA TensorRT高性能深度学习推理 NVIDIA TensorRT 是用于高性能深度学习推理的 SDK.此 SDK 包含深度学习推理优化器和运行时环境,可为深度学习推理应用提供低延迟和高 ...

  3. 【NX二次开发】Block UI 半径尺寸(沿曲线的位置)

    属性说明 常规         类型 描述     BlockID     String 控件ID     Enable     Logical 是否可操作     Group     Logical ...

  4. PTA4-6题目集总结与归纳

    前言: 继上篇blog所写的几种日期的求法,这次是把那几种聚合起来,即日期类的聚合设计.除下这类,一种是图形继承设计的3种变化,还有一种是3次对正则表达式的应用.当然,作为一个菜鸟,还是无法写成大佬的 ...

  5. csp-s模拟测试44「D·E·F」

    用心出题,用脚造数据 乱搞场 1 #include<bits/stdc++.h> 2 #define re register 3 #define int long long 4 #defi ...

  6. 通过ffmpeg转换为mp4格式

    FFMPEG  -i  example.wmv -c:v libx264 -strict -2 output.mp4FFMPEG  -i  example.wmv -c:v libx264 -stri ...

  7. Netty 框架学习 —— 编解码器框架

    编解码器 每个网络应用程序都必须定义如何解析在两个节点之间来回传输的原始字节,以及如何将其和目标应用程序的数据格式做相互转换.这种转换逻辑由编解码器处理,编解码器由编码器和解码器组成,它们每种都可以将 ...

  8. 解放生产力,自动化生成vue组件文档

    一.现状 Vue框架在前端开发中应用广泛,当一个多人开发的Vue项目经过长期维护之后往往会沉淀出很多的公共组件,这个时候经常会出现一个人 开发了一个组件而其他维护者或新接手的人却不知道这个组件是做什么 ...

  9. Vue3全局APi解析-源码学习

    本文章共5314字,预计阅读时间5-15分钟. 前言 不知不觉Vue-next的版本已经来到了3.1.2,最近对照着源码学习Vue3的全局Api,边学习边整理了下来,希望可以和大家一起进步. 我们以官 ...

  10. 20204107 孙嘉临《Python程序设计》实验三报告

    课程:<Python程序设计>班级: 2041姓名: 孙嘉临学号: 20204107实验教师:王志强实验日期:2020年5月24日必修/选修: 公选课## 1.实验内容创建服务端和客户端, ...