正解:$dp$

解题报告:

传送门$QwQ$

不妨令$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 ;
}

随机推荐

  1. 选择阿里云数据库HBase版十大理由

    根据Gartner的预计,全球非关系型数据库(NoSQL)在2020~2022预计保持在30%左右高速增长,远高于数据库整体市场. 阿里云数据库HBase版也是踏着技术发展的节奏,伴随着NoSQL和大 ...

  2. 如何解决iOS内存错误

    由于iOS5.0之前没有自动应用计数机制,也没有Java那样的垃圾回收功能.我们都需要自己管理和控制对象的回收,这是一件很麻烦的事情,也是做iOS项目中最容易出现的问题.如果不掌握这些方法,调试这些问 ...

  3. oracle函数 add_months(d1,n1)

    [功能]:返回在日期d1基础上再加n1个月后新的日期. [参数]:d1,日期型,n1数字型 [返回]:日期

  4. 同一个C语言工程不同C文件之间的函数互相调用问题

    定义一个function.h文件来声明这些函数: //#ifndef __FUNCTION_H__//#define __FUNCTION_H__   int fun(int,int);   int ...

  5. saltStack_安装和使用

    服务端: yum install -y salt-master 客服端: yum install -y salt-minion 服务端启动: systemctl restartsalt-master ...

  6. Project Euler Problem 18-Maximum path sum I & 67-Maximum path sum II

    基础的动态规划...数塔取数问题. 状态转移方程: dp[i][j] = num[i][j] + max(dp[i+1][j],dp[i+1][j+1]);

  7. Spark-shell批量命令执行脚本

    #!/bin/bash source /etc/profile exec $SPARK_HOME/bin/spark-shell --queue tv --name spark-sql-test -- ...

  8. poj 1066 Treasure Hunt (Geometry + BFS)

    1066 -- Treasure Hunt 题意是,在一个金字塔中有一个宝藏,金字塔里面有很多的墙,要穿过墙壁才能进入到宝藏所在的地方.可是因为某些原因,只能在两个墙壁的交点连线的中点穿过墙壁.问最少 ...

  9. colab找不到模块 no name

    https://www.jianshu.com/p/2cf00bb9db34?utm_source=oschina-app 穷学生学习神经网络一定体会过“等待”的痛苦... 循环一次epoch急死人, ...

  10. JavaScript 按位与和逻辑与

    逻辑与操作符有两个和好(&&)表示,有两个操作数,如下面的例子所示: var result = true && false;   第一个操作数 第二个操作数 结果 tr ...