您的位置:首页 > 其它

Hdu 5720 Wool

2016-07-18 08:04 232 查看
总的来说大概就是一个区间并嗯。。。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
#define LL long long

const int maxn = 112345;

LL arr[maxn];
pair<LL,LL> seg[maxn];

int main(){
int n;
LL L,R;
int T;
scanf("%d",&T);
while(T-- && ~scanf("%d %I64d %I64d",&n,&L,&R)){
for(int i=0;i<n;i++){
scanf("%I64d",&arr[i]);
}
sort(arr,arr+n);
int len = 0;
for(int i=1;i<n;i++){
seg[len++] = make_pair(
max(L,arr[i] - arr[i-1]  + 1)
,min(R,arr[i] + arr[i-1]  - 1)
);

if(seg[len-1].first > seg[len-1].second)
len--;
}
sort(seg,seg+len);
LL temp = 0;
LL st=seg[0].first;
LL ed=seg[0].second;
for(int i=1;i<len;i++){
if(seg[i].first > ed){
temp += ed - st + 1;
st = seg[i].first;
ed = seg[i].second;
}
else{
ed = max(ed,seg[i].second);
}
}
if(len)
temp += ed - st + 1;
printf("%I64d\n",R - L + 1 - temp);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: