孙云球(二分枚举)(AOJ 851)
来源:互联网 发布:分润系统源码 编辑:程序博客网 时间:2024/06/18 16:01
点击打开链接
孙云球
Description
大家一起来玩孙云球吧。
众所周知,孙云球是一种好玩有炫酷的球类游戏,由编程始祖 SLF 发明。但是评价一个
球队的战力是的特殊的,给定 n 个人,每个人的身高是 a[i],每有一个三个人的组合
(x,y,z)满足以下条件即可提供 1 的战斗力。条件如下:
1. a[x] < a[y] < a[z]
2. a[y] – a[x] ≤ a[z] – a[y] ≤ 2 * (a[y] – a[x])
SLF 同志的号召能力非常强大,组建的队伍身高千奇百怪,有 1cm 的也有 100km 的。但是,
他迫切期待他组建的这支球队的战力,你能告诉他吗?
众所周知,孙云球是一种好玩有炫酷的球类游戏,由编程始祖 SLF 发明。但是评价一个
球队的战力是的特殊的,给定 n 个人,每个人的身高是 a[i],每有一个三个人的组合
(x,y,z)满足以下条件即可提供 1 的战斗力。条件如下:
1. a[x] < a[y] < a[z]
2. a[y] – a[x] ≤ a[z] – a[y] ≤ 2 * (a[y] – a[x])
SLF 同志的号召能力非常强大,组建的队伍身高千奇百怪,有 1cm 的也有 100km 的。但是,
他迫切期待他组建的这支球队的战力,你能告诉他吗?
Input
第一行一个数 n,表示球队的人数。
接下来 n 行每行一个数,a[i]表示每个人的身高(1 ≤ a[i]≤ 10^9)
接下来 n 行每行一个数,a[i]表示每个人的身高(1 ≤ a[i]≤ 10^9)
Output
一行一个数,表示 SLF 战队的战斗力。
Sample Input
5311074
Sample Output
4
Hint
样例解释:1-3-7, 1-4-7, 4-7-10, and 1-4-10
对于 100%的数据,1 ≤ n ≤ 1000
思路
直接枚举算了一下是1e9数量级的,肯定会超时
结果交上去试了一下竟然过了(760ms),可见数据比较水
考虑二分进行优化
利用c++ stl中的函数lower_bound :
ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)返回一个非递减序列[first, last)中的第一个大于等于值val的位置。
注:调用lower_bound之前必须确定序列为有序序列,这也是二分的基础
另外要注意下标的边界情况,有效的范围是0~n-1
代码示例
对于 100%的数据,1 ≤ n ≤ 1000
思路
直接枚举算了一下是1e9数量级的,肯定会超时
结果交上去试了一下竟然过了(760ms),可见数据比较水
考虑二分进行优化
利用c++ stl中的函数lower_bound :
ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)返回一个非递减序列[first, last)中的第一个大于等于值val的位置。
注:调用lower_bound之前必须确定序列为有序序列,这也是二分的基础
另外要注意下标的边界情况,有效的范围是0~n-1
代码示例
#include<bits/stdc++.h>using namespace std;const int maxn=1000;int a[maxn+50];int n;int main(){scanf("%d",&n);for(int i=0;i<n;++i) scanf("%d",&a[i]);sort(a,a+n);long long ans=0;for(int i=0;i<n;++i){for(int j=i+1;j<n;++j){int l=lower_bound(a,a+n,2*a[j]-a[i])-a;int r=lower_bound(a,a+n,3*a[j]-2*a[i])-a;if(a[r]>3*a[j]-2*a[i]) --r;l=max(l,j+1);r=min(r,n-1);if(l>n-1) continue;ans+=r-l+1; }}printf("%lld\n",ans);return 0;}
1 0
- 孙云球(二分枚举)(AOJ 851)
- 【二分答案+枚举】AOJ-215 Mountain Walking
- AOJ.850 电缆公司的烦恼 (二分+枚举)
- AOJ 0033 Ball (枚举)
- SLF改造计划(三分枚举)(AOJ 853)
- 整数拆段(枚举,DP)(AOJ 847)
- poj3273(二分枚举)
- Aoj 0033 Ball【dfs枚举】
- Ball(AOJ 0033)二进制枚举
- aoj 2251 二分图匹配
- 青蛙过河 (二分+枚举)
- POJ 3977(枚举+二分)
- NEFU 1211 (二分枚举)
- poj2785(二分折半枚举)
- [搜索or枚举]AOJ 0525 Osenbei
- AOJ-AHU-OJ-189 最长递增子序列(模拟+二分查找)
- AOJ-problem-851
- 【aoj 】 幂集(回溯)
- 决策树--ID3算法
- RequestMapping的相关知识讲解(补)
- Windows2008 R2服务器配置TLS1.2方法
- 【EJB】Developing EJB Applications -- Chapter 2(创建企业级Bean项目)
- PAT A1086
- 孙云球(二分枚举)(AOJ 851)
- 程序员面试题:排序和查找的实现(JAVA版)
- Android 编译错误:unreachable statement
- PHP发送邮件
- 前缀++和后缀++
- 【数码管/定时器/中断】一个定时器控制数码管显示
- 判断序列是否为正确的出栈序列
- InSAR Processing Wiki
- 浅析TCP与UDP