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 ...
随机推荐
- (七)springmvc之ModelAttribute注解
一.没有使用@ModelAttribute的Controller方法. @RequestMapping("/save") public String save(User user) ...
- (十一)web服务与javaweb结合(2)
一.解决问题及解决方法 解决问题:上章节用监听器的方式是有缺陷的:web服务的端口和web工程的端口不能一致. 解决方案:将webService绑定到web工程中,使得共用一个端口. 二.案例 2.1 ...
- android 自动化测试案例之 MonkeyRunner
#-*- coding: UTF-8 -*- #上面第一行是设置文件编码,windows下第一行必须是这个#文件名 MonkeyRunner.py#功能: 使用monkey runner测试app,此 ...
- ArrayList和CopyOnWriteArrayList(转载)
这篇文章的目的如下: 了解一下ArrayList和CopyOnWriteArrayList的增删改查实现原理 看看为什么说ArrayList查询快而增删慢? CopyOnWriteArrayList为 ...
- TypeScript入门七:TypeScript的枚举
关于枚举 数字枚举 字符串枚举 异构枚举 计算的和常量成员 运行时的枚举与反向映射 常量枚举与外部枚举 一.关于枚举 枚举:一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计 ...
- PHP常见函数
有时候,运行nginx和PHP CGI(PHP FPM)web服务的Linux服务器,突然系统负载上升,用top命令查看,很多phpcgi进程的CPU利用率接近100%后来通过跟踪发现,这种情况与PH ...
- 解决ios中input兼容性问题
1.解决input输入框在iOS中有阴影问题 input{ -webkit-appearance: none; } 2.checkbox.raido在ios中阴影问题 单选: ...
- windows系统编辑过的脚本文件,在linxu上执行报错 /bin/sh^M: bad interpreter: No such file or directory
如题! 现象: 当时的场景是这样的:我在IDEA中编辑了项目中的脚本sh,然后利用maven打成zip包.把zip包上传到linux服务器解压运行. 当在linux服务器上运行该sh脚本文件时,提示错 ...
- Django drf:cbv(class base view)源码分析
cbv是基于类的视图 # 首先要在路由层配置: # 找到类绑定方法as_view # 点开dispatch的方法 # http_method_names其实就是方法的列表 整个流程: 1.写一个基于类 ...
- 全排列 递归方法(permutation原理
https://blog.csdn.net/axiqia/article/details/50967863 原博客 (一)递归的全排列算法 (A.B.C.D)的全排列为 1.A后面跟(B.C.D)的 ...