AGC009C Division into Two
题意
有\(n\)个严格升序的数,请你分成两个集合\(A\)和\(B\),其中一个集合任意两数之差不小于\(x\),另一集合任意两数之差不小于\(y\)。
问方案数,集合可以为空。
$n \le 10^5 $
传送门
思路
又是一道神仙\(dp\)
设\(dp_i\)表示当前\(B\)集合的最后一个数是\(a_i\)的方案数。
如果暴力转移就是:$$dp_i=\sum_{j<i & a_i-a_j\ge y}dp_j$$
并且满足区间\([j+1,i-1]\)能够放在\(A\)集合中
可以发现,满足条件的\(j\)是一个区间,因此前缀和优化,最后把答案累加起来就好了。
代码十分简短
#include <bits/stdc++.h>
const int N=100005,mu=1000000007;
int n,s[N],dp[N],l=0,r=0;
long long x,y,a[N];
int main(){
scanf("%d%lld%lld",&n,&x,&y);
for (int i=1;i<=n;i++) scanf("%lld",&a[i]);
if (x>y) std::swap(x,y);
for (int i=1;i+2<=n;i++)
if (a[i+2]-a[i]<x){
puts("0");return 0;
}
dp[0]=s[0]=1;
for (int i=1;i<=n;i++){
while (a[i]-a[r+1]>=y && r<i-1) r++;
if (l<=r){
if (l) dp[i]=(s[r]-s[l-1]+mu)%mu;
else dp[i]=s[r];
}
if (a[i]-a[i-1]<x) l=i-1;
s[i]=(s[i-1]+dp[i])%mu;
}
int ans=0;
for (int i=n;i>=0;i--){
ans=(ans+dp[i])%mu;
if (a[i+1]-a[i]<x && i<n) break;
}
printf("%d",ans);
}
后记
我好菜啊。以后写\(Atcoder \space dp\)的时候都可以加上思路的第一和最后一句了
AGC009C Division into Two的更多相关文章
- [AGC009C]Division into 2
题意: 有一个长度为$N$的递增序列$S_i$,要把它分成$X,Y$两组,使得$X$中元素两两之差不小于$A$且$Y$中元素两两之差不小于$B$,求方案数 首先考虑$O\left(n^2\right) ...
- 【AGC009C】Division into Two
[AGC009C]Division into Two 题面 洛谷 题解 首先有一个比较显然的\(n^2\)算法: 设\(f_{i,j}\)表示\(A\)序列当前在第\(i\)个,\(B\)序列当前在第 ...
- python from __future__ import division
1.在python2 中导入未来的支持的语言特征中division(精确除法),即from __future__ import division ,当我们在程序中没有导入该特征时,"/&qu ...
- [LeetCode] Evaluate Division 求除法表达式的值
Equations are given in the format A / B = k, where A and B are variables represented as strings, and ...
- 关于分工的思考 (Thoughts on Division of Labor)
Did you ever have the feeling that adding people doesn't help in software development? Did you ever ...
- POJ 3140 Contestants Division 树形DP
Contestants Division Description In the new ACM-ICPC Regional Contest, a special monitoring and su ...
- 暴力枚举 UVA 725 Division
题目传送门 /* 暴力:对于每一个数都判断,是否数字全都使用过一遍 */ #include <cstdio> #include <iostream> #include < ...
- GDC2016【全境封锁(Tom Clancy's The Division)】对为何对应Eye Tracked System,以及各种优点的演讲报告
GDC2016[全境封锁(Tom Clancy's The Division)]对为何对应Eye Tracked System,以及各种优点的演讲报告 原文 4Gamer編集部:松本隆一 http:/ ...
- Leetcode: Evaluate Division
Equations are given in the format A / B = k, where A and B are variables represented as strings, and ...
随机推荐
- opencv-03--图像的算术运算
图像的算术运算 Mat类把很多算数操作符都进行了重载,让它们来符合矩阵的一些运算,如果+.-.点乘等. 下面我们来看看用位操作和基本算术运算来完成colorReduce程序,它更简单,更高效. 将25 ...
- Asp.Net Core 轻松学系列-5利用 Swagger 自动生成接口文档
目录 前言 结语 源码下载 前言 目前市场上主流的开发模式,几乎清一色的前后端分离方式,作为服务端开发人员,我们有义务提供给各个客户端良好的开发文档,以方便对接,减少沟通时间,提高开发效率:对 ...
- 如何用SAP WebIDE的Fiori创建向导基于ABAP OData service快速创建UI5应用
如果我们手上已经有可以正常工作的OData服务,无论位于ABAP on-premise系统还是public上的internet OData service,都可以用SAP WebIDE里的Fiori创 ...
- Marketing Cloud的contact merge机制
Marketing Cloud的contact支持多种多样的数据源,如下图所示: SAP Hybris Commerce SAP ERP SAP Cloud for Customer SAP Gigy ...
- dubbo常见异常及解决方式
1.出现RpcException: Failed to invoke the method post in the service com.xxx.xxx.xxx异常怎么办?表示调用失败1.检查网络是 ...
- Computer Vision_33_SIFT:Speeded-Up Robust Features (SURF)——2006
此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...
- 单元测试自动生成工具evosuite
github地址:https://github.com/EvoSuite/evosuite 官网地址:http://www.evosuite.org 快速开始: 1. junit <de ...
- 剑指Offer编程题(python)——二叉树
1.重建二叉树 """ 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1,2,4 ...
- 关于阿里云OSS上传图片之后会被旋转90度的解决办法
原文:https://www.cnblogs.com/wuhjbk/p/10133596.html 问题描述:正常的图片前端上传到oss成功之后的资源地址.在html上引用的时候被旋转了90度oss资 ...
- vscode远程修改文件('file': A system error occured )
The command you want is :e (short for :edit). If you use :edit! it will discard local changes and re ...