hdu 5720

问题描述
黎明时,Venus为Psyche定下了第二个任务。她要渡过河,收集对岸绵羊身上的金羊毛。

那些绵羊狂野不驯,所以Psyche一直往地上丢树枝来把它们吓走。地上现在有n n n根树枝,第i i i根树枝的长度是ai a_i a​i​​.

如果她丢的下一根树枝可以和某两根树枝形成三角形,绵羊就会被激怒而袭击她。

现在Psyche手中只有长度不小于L L L且不大于R R R的树枝。请你帮忙计算,她下一根可以丢多少种不同长度的树枝而不会把绵羊激怒呢?
输入描述
第一行,一个整数T(1≤T≤10) T  (1 \le T \le 10) T(1≤T≤10),代表数据组数。

对于每组数据,第一行有三个整数n,L,R n,L,R n,L,R (2≤n≤105,1≤L≤R≤1018) (2 \le n \le 10 ^ 5, 1 \le L \le R \le 10 ^ {18}) (2≤n≤10​5​​,1≤L≤R≤10​18​​)。

第二行,n n n个整数,第i i i个整数为ai a_i a​i​​ (1≤ai≤1018) (1 \le a_i \le 10 ^ {18}) (1≤a​i​​≤10​18​​),代表第i i i根树枝的长度。
输出描述
输出T T T行,对于每组数据,输出选取方式总数。
输入样例
2
2 1 3
1 1
4 3 10
1 1 2 4
输出样例
2
5
Hint
对于第一组数据,可以选用长度为2,3 2, 3 2,3的树枝。

对于第二组数据,可以选用长度为6,7,8,9,10 6, 7, 8, 9, 10 6,7,8,9,10的树枝。

一般懒得解释题意就直接放题目!
首先关于三角形的三边判断是任意一边要小于另外两边的和大于另外两边的差,所以就是找出范围就好。将地上的枝条排序,只要求出相邻的两两边的长度限制的范围就好,因为其他任意两两边的范围会被这个所包括
然后将这些范围去重,形成几个互不相交的区间范围,然后用总的范围一个一个减去就好(当然,减得时候要判断这些范围与总的范围的相交
 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; typedef long long ll;
const int M = 1e5 + ;
ll a[M]; struct node{
bool dis;
ll l,r;
}b[M],c[M]; bool cmp(node a,node b){return a.l<b.l;} bool judge(ll a,ll b,ll c)
{
if (a>=b&&a<=c) return true;
return false;
} int main()
{
int t,n;
ll l,r;
scanf("%d",&t);
while (t--)
{
scanf("%d%I64d%I64d",&n,&l,&r);
for (int i= ; i<=n ; i++)
scanf("%I64d",&a[i]);
sort(a+,a+n+);
int ans=;
for (int i= ; i<=n ; i++)
{
b[++ans].l=a[i]-a[i-]+;
b[ans].dis=false;
b[ans].r=a[i]+a[i-]-;
b[ans].dis=true;
}
sort(b+,b+ans,cmp);
int cas=;c[++cas].l=b[].l;c[cas].r=b[].r;
for (int i= ; i<=ans ; i++){
if (judge(b[i].l,c[cas].l,c[cas].r)){
if (!judge(b[i].r,c[cas].l,c[cas].r))
c[cas].r=b[i].r;
}
else{
c[++cas].l=b[i].l;c[cas].r=b[i].r;
}
}
ll res=r-l+;
for (int i= ; i<=cas ; i++){
if (judge(c[i].l,l,r)){
if (judge(c[i].r,l,r))
res-=(c[i].r-c[i].l+);
else
res-=(r-c[i].l+);
}
else {
if (c[i].l<l){
if (judge(c[i].r,l,r))
res-=(c[i].r-l+);
else if (c[i].r>r)
res-=(r-l+);
}
}
}
if (res<) res=;
printf("%I64d\n",res);
}
return ;
}

关系)

hdu 5720 Wool的更多相关文章

  1. hdu 5720 BestCoder 2nd Anniversary Wool 推理+一维区间的并

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5720 题意:有n(n <= 105)个数 ,每个数小于等于 1018:问在给定的[L,R]区间中 ...

  2. hdu 5920 Wool 思路

    Wool Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Problem D ...

  3. hdu 5720(贪心+区间合并)

    Wool Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Subm ...

  4. hdu 5720

    考虑三个树枝:a,b,c若c是将要抛出的树枝,那么形成三角形的条件是a+b>c and a-b<c 可以写成 c属于开区间(a-b,a+b)对于每个C和许许多多的其他边,如何保证C不构成三 ...

  5. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  7. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

  8. HDU 4569 Special equations(取模)

    Special equations Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u S ...

  9. HDU 4006The kth great number(K大数 +小顶堆)

    The kth great number Time Limit:1000MS     Memory Limit:65768KB     64bit IO Format:%I64d & %I64 ...

随机推荐

  1. TIOBE Index for November 2015(转载)

    原文地址:http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html November Headline: Java once a ...

  2. JS Math对象中一些小技巧

    JS中快速获取数组中最大/最小值 var a=[1,2,3,5]; alert(Math.max.apply(Math, a));//最大值 alert(Math.min.apply(Math, a) ...

  3. JSTL标签库中<c:choose></c:choose>不能放JSP页面<!-- -->注释

    笔者最近在使用JSTL标签库的<c:choose>标签时候,发现在该标签体中加了JSP的<!-- -->注释时,总是会显示报错信息.错误的信息如下: <span styl ...

  4. [家里蹲大学数学杂志]第047期18 世纪法国数学界的3L

    1 Lagrange---78岁 约瑟夫·拉格朗日, 全名约瑟夫·路易斯·拉格朗日 (Joseph-Louis Lagrange 1735~1813) 法国数学家.物理学家. 1736年1月25日生于 ...

  5. Makefile中的特殊宏定义以及实用选项

    Makefile中的一些特殊宏定义的名字跟shell中的位置变量挺相似的. $?    当前目标所依赖的文件列表中比当前目标文件还要新的文件 $@   当前目标我名字 $<   当前依赖文件的名 ...

  6. WindowsForm只允许运行一个实例

    static class Program { private static Mutex onlyOne; /// <summary> /// 应用程序的主入口点. /// </sum ...

  7. 剑指Offer:面试题26——复制复杂的链表(java实现)

    问题描述: 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点). 思路1: 1.先复制链表节点,并用next链接起来. 2.然后对每一个结点去修改 ...

  8. Java分布式Socket监控项目思考

    内容说明 一项课程作业Java编写Socket长连接监控分布式终端,并将终端状态写入数据库供前端查询 基础:c++/Posix/APUE/Mysql&sqlite 核心内容:Socket/线程 ...

  9. 树莓派B+上手小记--使用HDMI线连接显示器

    入手还算比较顺利,一开始使用网上下的别人精简的OS,发现ACT及PWR灯一直亮着,上网查说用HDMI连接显示器需要修改配置文件config.txt,但修改后情况依旧. 如果还是用官方的系统试试吧,上网 ...

  10. 8. js中json格式解析

    var doc = O_PARAMETER.FJSonStr;(doc为:{"items":[],"nextId":0}) //1.先转为json对象,主要有以 ...