【C++竞赛 F】yyy的三角形
来源:互联网 发布:java 微信网页授权 编辑:程序博客网 时间:2024/06/16 12:56
时间限制:2s 内存限制:32MB
问题描述
yyy对三角形非常感兴趣,他有n个木棍,他正在用这些木棍组成三角形。这时xxx拿了两根木棍过来,xxx希望yyy能给他一根木棍,使得xxx可以组成一个三角形。yyy想知道他有多少根木棍满足xxx的要求。
输入描述
第一行一个整数T(1≤T≤5)表示数据组数。
对于每组数据第一行两个整数n(1≤n≤〖10〗^5 ),q(1≤q≤〖10〗^5),分别表示yyy的木棍数量和xxx的询问次数。第二行n个用空格分开的整数L_i (1≤L_i≤〖10〗^9),分别表示yyy的n根木棍的长度。接下来q行,每行两个整数a,b(1≤a,b≤〖10〗^9),表示xxx每次询问两根木棍的长度。
输出描述
对于每组数据,输出q行,每行一个整数表示答案。
输入样例
1
7 2
2 8 5 1 10 5 9
3 9
6 5
输出样例
3
6
【题目链接】:
【题解】
三角形的三边要满足
a+b>c
a+c>b
b+c>a
则转换一下就是
max(a-b,b-1)<c<a+b
排序后用二分搞出两个端点就可以了;
【完整代码】
#include <bits/stdc++.h>#define rep1(i,a,b) for (int i = a;i <= b;i++)using namespace std;#define pb push_back;const int MAXN = 1e5+100;int n,q;int c[MAXN];int main(){ //freopen("D:\\rush.txt","r",stdin); int T; scanf("%d",&T); while (T--) { scanf("%d%d",&n,&q); rep1(i,1,n) scanf("%d",&c[i]); sort(c+1,c+1+n); rep1(i,1,q) { int L,R,a,b; scanf("%d%d",&a,&b); L = max(b-a,a-b); R = a+b; int l = 0,r = n,ans1=0; while (l <= r) { int m = (l+r)>>1; if (L<c[m]) { ans1 = m; r = m-1; } else l = m+1; } l = 0,r = n; int ans2=0; while (l <= r) { int m = (l+r)>>1; if (c[m]<R) { ans2 = m; l = m+1; } else r = m-1; } printf("%d\n",ans2-ans1+1); } } return 0;}
0 0
- 【C++竞赛 F】yyy的三角形
- 【C++竞赛 C】yyy的数学公式
- 【C++竞赛 B】yyy的回文数组
- 【C++竞赛 E】xxx和yyy的旅行
- F.三角形
- P1803 凌乱的yyy
- 凌乱的yyy
- 凌乱的yyy
- P1803 凌乱的yyy
- 凌乱的yyy
- 凌乱的yyy
- P1803 凌乱的yyy
- [LUOGU1803] 凌乱的yyy
- yyy
- yyy
- yyy
- yyy
- yyy
- python setuptools创建分发包
- web前端之锋利的jQuery一:认识jQuery
- mysql高可用双主配置
- 图像分割技术
- 杭电 汉诺塔问题总结
- 【C++竞赛 F】yyy的三角形
- 线段树从零开始
- 代码整洁之道读书笔记(六)
- hibernate查询
- http1.0和1.1的区别
- 刘汝佳《算法竞赛入门经典》推荐题目
- [FUNC]ObjRegisterActive
- <<Linux内核完全剖析 --基于0.12内核>>学习笔记 第4章 80x86保护模式及其编程 4.5 保护
- Swift-计算属性