$AT2292\ Division\ into\ Two$ $dp$
正解:$dp$
解题报告:
不妨令$A\geq B$,于是先$sort$然后预处理判下如果有三个元素两两差都小于$B$的就直接$GG$了.
然后考虑对集合$X$进行$dp$,剩下的数放到$Y$就成.设$f_i$表示集合$X$最后一个选择的是$i$时的方案数,就有$f_i=\sum f_j,a_i-a_j\geq A$.
嗷然后因为我很呆所以我开始想的时候漏了个条件把代码打完才发现样例都过不去,,,就还需要$[j+1,i-1]$中任意两个数的差大于等于$B$.显然$j$就一段区间,前缀和优化一波就完事$QwQ$
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define int long long
#define gc getchar()
#define t(i) edge[i].to
#define w(i) edge[i].wei
#define ri register int
#define rc register char
#define rb register bool
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i) const int N=1e5+,mod=1e9+;
int n,a[N],A,B,f[N],sum[N],pos1,pos2,as; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il int dec(ri x,ri y){x-=y;if(x<)x+=mod;return x;}
il int ad(ri x,ri y){x+=y;if(x>=mod)x-=mod;return x;} signed main()
{
//freopen("2292.in","r",stdin);freopen("2292.out","w",stdout);
n=read();A=read();B=read();rp(i,,n)a[i]=read();sort(a+,a++n);if(A<B)swap(A,B);
rp(i,,n)if(a[i]-a[i-]<B)return printf("0\n"),;;f[]=sum[]=;
rp(i,,n)
{
while(a[i]-a[pos1+]>=A)++pos1;;if(pos2<=pos1)f[i]=dec(sum[pos1],pos2?sum[pos2-]:);
sum[i]=ad(sum[i-],f[i]);if(a[i]-a[i-]<B && i>)pos2=i-;
}
my(i,n,){as=ad(as,f[i]);if(i<n && a[i+]-a[i]<B)break;}printf("%lld\n", as);
return ;
}
随机推荐
- MySQL按天,按周,按月,按时间段统计【转载】
自己做过MySQL按天,按周,按月,按时间段统计,但是不怎么满意,后来找到这位大神的博客,转载一下,谢谢这位博主的分享 知识点:DATE_FORMAT 使用示例 select DATE_FORMAT( ...
- MySQL数据库字符集和整理
MySQL数据库字符集和整理(2009-11-20 22:23:37) mysql数据库 it 其实这个表在MySQL数据库中通过phpMyAdmin就能看到,icech只是把表格整理了一下方便 ...
- Android 设置TextView字体颜色
设置TextView字体的颜色其实很简单,尤其是直接在XML文件中,可以直接通过textColor属性指定颜色值,达到设置文本颜色的效果:那在代码中如何动态设置字体的颜色值呢? 接下来,介绍如何通过J ...
- HTML静态网页--表单验证和事件
1.表单验证<form></form> (1).非空验证(去空格) (2).对比验证(跟一个值对比) (3).范围验证(根据一个范围进行判断) (4).固定格式验证:电话号码, ...
- centos 磁盘挂载
1.更改磁盘格式 fdisk -l fdisk /dev/vdb mkfs.xfs /dev/vdb1 mkfs.xfs /dev/vdb1 -f 2.查看UUID blkid 3.挂载文件夹 vim ...
- HDU2087 剪花布条 题解 KMP算法
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2087 题目大意:给定字符串 \(s\) 和 \(t\) ,找出 \(s\) 中出现不重叠的 \(t\) ...
- SpringBoot2集成Activiti6
Activiti是领先的轻量级的,以Java为中心的开源BPMN(Business Process Modeling Notation)引擎,实现了真正的流程自动化.下面介绍如何在SpringBoot ...
- 原生sql和 TP sql怎么关联?
整合后
- vue v-for循环中key属性的使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- P1009 字符三角形
题目描述 输入一个字符c,按照阳历输出的格式输出由该字符组成的一个字符三角形. 输入格式 输入包含一个字符c. 输出格式 输出由该字符c组成的字符三角形. 样例输入 A 样例输出 A AAA AAAA ...