Justoj 2389: 拼接三角形 二分查找
2389: 拼接三角形
时间限制: C/C++ 1 s Java/Python 3 s 内存限制: 128 MB 答案正确: 7 提交: 21
提交 我的状态
题目描述
Ocean最爱三角形,现在Ocean手里有n条线段,Ocean现在想知道,这n条线段可以组成多少种三角形。
输入
一个整数nn(3≤n≤3000)(3≤n≤3000)
接下来nn个整数x(1≤x≤10000)x(1≤x≤10000)
输出
三角形的种类数
样例输入
6
3 2 4 2 5 2
样例输出
5
题解:通过cnt数组记录相同长度出现次数,容器v插入所有互不相同的数字,对v进行排序,然后开始遍历,找出比该数大的数组合成的三角形个数(前两个长度遍历,最后一个长度二分查找),对于出现过2次长度的特殊处理(等腰三角形),出现3次的数量加1(等边三角形)。
#include<iostream>
#include<vector>
#include<algorithm>
#define ll long long
using namespace std;
vector<ll>v;
ll cnt[10011];
ll sort2(ll x,ll up){
ll i=x,j=v.size()-1;
while(i<=j){
ll m=i+((j-i)>>1);
if(v[m]>=up)
j=m-1;
else
i=m+1;
}
return i-1;//i是第一个大于等于up的数字的下标
}
int main(){
ll n,s;
scanf("%lld",&n);
while(n--){
scanf("%lld",&s);
if(!cnt[s])
v.push_back(s);
cnt[s]++;
}
ll ans=0;
sort(v.begin(),v.end());
ll l=v.size();
for(ll i=0;i<l;i++){
if(cnt[v[i]]>=2){
for(ll j=0;v[j]<2*v[i]&&j<l;j++)
if(v[j]!=v[i])
ans++;
if(cnt[v[i]]>=3)
ans++;
}
for(ll j=i+1;j<l-1;j++)
ans+=sort2(j+1,v[i]+v[j])-j;
}
printf("%lld\n",ans);
return 0;
}
Justoj 2389: 拼接三角形 二分查找的更多相关文章
- FZU-1881-Problem 1881 三角形问题,打表二分查找~~
B - 三角形问题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descripti ...
- 选择、冒泡排序,二分查找法以及一些for循环的灵活运用
import java.util.Arrays;//冒泡排序 public class Test { public static void main(String[] args) { int[] ar ...
- 递归函数&二分查找
一.递归函数 1)定义 在函数中调用函数本身,就是递归 在python中递归的深度最大为1000,但实际达不到1000 def func(): print("-----func-----&q ...
- LC T668笔记 & 有关二分查找、第K小数、BFPRT算法
LC T668笔记 [涉及知识:二分查找.第K小数.BFPRT算法] [以下内容仅为本人在做题学习中的所感所想,本人水平有限目前尚处学习阶段,如有错误及不妥之处还请各位大佬指正,请谅解,谢谢!] !! ...
- jvascript 顺序查找和二分查找法
第一种:顺序查找法 中心思想:和数组中的值逐个比对! /* * 参数说明: * array:传入数组 * findVal:传入需要查找的数 */ function Orderseach(array,f ...
- Java实现的二分查找算法
二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点 ...
- 从一个NOI题目再学习二分查找。
二分法的基本思路是对一个有序序列(递增递减都可以)查找时,测试一个中间下标处的值,若值比期待值小,则在更大的一侧进行查找(反之亦然),查找时再次二分.这比顺序访问要少很多访问量,效率很高. 设:low ...
- java实现二分查找
/** * 二分查找 * @param a * @param n * @param value * @return * @date 2016-10-8 * @author shaobn */ publ ...
- 最新IP地址数据库 二分逼近&二分查找 高效解析800万大数据之区域分布
最新IP地址数据库 来自 qqzeng.com 利用二分逼近法(bisection method) ,每秒300多万, 比较高效! 原来的顺序查找算法 效率比较低 readonly string i ...
随机推荐
- python面试题整合
面试题整合 面试题—并发编程部分
- LeetCode--11_974_Subarray_Sums_Divisible_by_K
题目链接:点击这里 public static int subarraysDivByK(int[] A, int K) { int ans = 0,sum = 0; int[] B = new int ...
- 树莓派中QT实现PWM
树莓派中QT实现PWM 在QT中实现 PWM 使用的驱动为 wiringPi 之前的博客中已经介绍了 wiringPi , BOARD 管脚, BCM 之间的关系 这次, 就介绍在 wiringPi ...
- P4177 [CEOI2008]order 网络流,最小割,最大权闭合子图
题目链接 \(Click\) \(Here\) 如果没有租用机器就是一个裸的最大权闭合子图.现在有了租用机器应该怎么办呢? 单独拆点是不行的,因为会和直接买下的情况脱离关系,租借是和连边直接相关的,那 ...
- vue-微信支付or支付宝支付片段
<ulclass="way_list"> <li v-if="!isWeixinBrowser" class="group al ...
- Jmeter接口测试操作
一.Jmeter接口测试操作步骤 1. 启动jmeter,右键点击测试计划-->添加-->Threads(Users)-->线程组,点击线程组菜单,右边显示参数设置. 2 . 右键点 ...
- 老男孩Python全栈学习 S9 日常作业 011
1.编写装饰器,为函数加上统计时间的功能 import time def Decoration(func): def Timmer(): # 开始时间 Start = time.time() func ...
- 实现Map接口(hash原理)
闲来无事,就实现一个简单的map来练练手吧! HashMap的底层实现主要是基于数组和链表来实现的,HashMap中通过key的hashCode来计算hash值的,由这个hash值计算在数组中的位置, ...
- ASP.NET Web API 2 OData v4教程
程序数据库格式标准化的开源数据协议 为了增强各种网页应用程序之间的数据兼容性,微软公司启动了一项旨在推广网页程序数据库格式标准化的开源数据协议(OData)计划,于此同时,他们还发 布了一款适用于OD ...
- Java(19)JDBC
一.使用jdbc的步骤 a.引入数据库厂商提供的驱动程序(引入jar包) b.记载驱动程序 Clss.forName("驱动程序类") c.获得连接 Connection con ...