1307 - Counting Triangles
Time Limit: 2 second(s) Memory Limit: 32 MB

You are given N sticks having distinct lengths; you have to form some triangles using the sticks. A triangle is valid if its area is positive. Your task is to find the number of ways you can form a valid triangle using the sticks.

Input

Input starts with an integer T (≤ 10), denoting the number of test cases.

Each case starts with a line containing an integer N (3 ≤ N ≤ 2000). The next line contains N integers denoting the lengths of the sticks. You can assume that the lengths are distinct and each length lies in the range [1, 109].

Output

For each case, print the case number and the total number of ways a valid triangle can be formed.

Sample Input

Output for Sample Input

3

5

3 12 5 4 9

6

1 2 3 4 5 6

4

100 211 212 121

Case 1: 3

Case 2: 7

Case 3: 4


PROBLEM SETTER: JANE ALAM JAN
题意:给你的边能构成多少个三角形。
思路:先暴力组合两条边,然后二分查询第三条边即可。
 1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<queue>
6 #include<stdlib.h>
7 #include<math.h>
8 #include<stack>
9 #include<vector>
10 #include<map>
11 using namespace std;
12 typedef long long LL;
13 int ans[2005];
14 typedef struct pp
15 {
16 short int x;
17 short int y;
18 } ss;
19 ss ak[4000005];
20 int main(void)
21 {
22 int i,j,k;
23 scanf("%d",&k);
24 int s;
25 for(s=1; s<=k; s++)
26 {
27 int n,m;
28 scanf("%d",&n);
29 for(i=0; i<n; i++)
30 {
31 scanf("%d",&ans[i]);
32 }
33 sort(ans,ans+n);
34 int cnt=0;
35 for(i=0; i<n; i++)
36 {
37 for(j=i+1; j<n; j++)
38 {
39 ak[cnt].x=i;
40 ak[cnt].y=j;
41 cnt++;
42 }
43 }
44 LL sum=0;
45 for(i=0; i<cnt; i++)
46 {
47 int l=0;
48 int r=n-1;
49 int maxx=max(ans[ak[i].x],ans[ak[i].y]);
50 int minn=min(ans[ak[i].x],ans[ak[i].y]);
51 int id=0;
52 l=0;
53 r=n-1;int id1=-1;
54 while(l<=r)
55 {
56 int mid=(l+r)/2;
57 if(ans[mid]+minn>maxx)
58 {
59 id1=mid;
60 r=mid-1;
61 }
62 else l=mid+1;
63 }
64 l=0;
65 r=n-1;int id2=-1;
66 while(l<=r)
67 {
68 int mid=(l+r)/2;
69 if(ans[mid]<maxx+minn)
70 {
71 id2=mid;
72 l=mid+1;
73 }
74 else r=mid-1;
75 }
76 if(id1!=id2)
77 {
78 sum+=id2-id1+1;
79 if(ak[i].x>=id1&&ak[i].x<=id2)
80 sum--;
81 if(ak[i].y<=id2&&ak[i].y>=id1)
82 sum--;
83 }
84 }
85 printf("Case %d: ",s);
86 printf("%lld\n",sum/3);
87 }
88 return 0;
89 }

1307 - Counting Triangles的更多相关文章

  1. hdu 1396 Counting Triangles(递推)

    Counting Triangles Problem Description Given an equilateral triangle with n thelength of its side, p ...

  2. Counting Triangles(hd1396)

    Counting Triangles Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  3. UVA 12075 - Counting Triangles(容斥原理计数)

    题目链接:12075 - Counting Triangles 题意:求n * m矩形内,最多能组成几个三角形 这题和UVA 1393类似,把总情况扣去三点共线情况,那么问题转化为求三点共线的情况,对 ...

  4. LA 3295 (计数 容斥原理) Counting Triangles

    如果用容斥原理递推的办法,这道题确实和LA 3720 Highway很像. 看到大神们写的博客,什么乱搞啊,随便统计一下,这真的让小白很为难,于是我决定用比较严格的语言来写这篇题解. 整体思路很简单: ...

  5. UVALive 3295 Counting Triangles

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  6. UVA 12075 Counting Triangles

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  7. UVA 1393 Highways,UVA 12075 Counting Triangles —— (组合数,dp)

    先看第一题,有n*m个点,求在这些点中,有多少条直线,经过了至少两点,且不是水平的也不是竖直的. 分析:由于对称性,我们只要求一个方向的线即可.该题分成两个过程,第一个过程是求出n*m的矩形中,dp[ ...

  8. Codestorm:Counting Triangles 查各种三角形的个数

    题目链接:https://www.hackerrank.com/contests/codestorm/challenges/ilia 这周六玩了一天的Codestorm,这个题目是真的很好玩,无奈只做 ...

  9. HDUOJ-Counting Triangles

    Counting Triangles Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

随机推荐

  1. MySQL深层理解,执行流程

    MySQL是一个关系型数据库,关联的数据保存在不同的表中,增加了数据操作的灵活性. 执行流程 MySQL是一个单进程服务,每一个请求用线程来响应, 流程: 1,客户请求,服务器开辟一个线程响应用户. ...

  2. SparkStreaming消费Kafka,手动维护Offset到Mysql

    目录 说明 整体逻辑 offset建表语句 代码实现 说明 当前处理只实现手动维护offset到mysql,只能保证数据不丢失,可能会重复 要想实现精准一次性,还需要将数据提交和offset提交维护在 ...

  3. linux 挂载本地iso

    mount -t iso9660 -o loop /mnt/temp/rhel-server-6.5-i386-dvd.iso /mnt/cdrom -t :设备类型 iso9660是指CD-ROM光 ...

  4. 解决springboot序列化 json数据到前端中文乱码问题

    前言 关于springboot乱码的问题,之前有文章已经介绍过了,这一篇算是作为补充,重点解决对象在序列化过程中出现的中文乱码的问题,以及后台报500的错误. 问题描述 spring Boot 中文返 ...

  5. 【Linux】【Services】【SaaS】 kubeadm安装kubernetes

    1. 简介 2. 环境 2.1. OS:  CentOS Linux release 7.5.1804 (Core) 2.2. Ansible: 2.6.2-1.el7 2.3. docker: 2. ...

  6. 使用 ACE 库框架在 UNIX 中开发高性能并发应用

    使用 ACE 库框架在 UNIX 中开发高性能并发应用来源:developerWorks 中国 作者:Arpan Sen ACE 开放源码工具包可以帮助开发人员创建健壮的可移植多线程应用程序.本文讨论 ...

  7. UNIX基本命令

    ### 1. 必学命令 help [子命令] : 查看某一个具体的子命令的使用方法### 2. 常用命令 - cd path : 将当前路径切换到path路径 - pwd : 查看当前所在路径 - l ...

  8. Java Timestamp 类的使用

    很简单,我们可以这样声明 Timestamp ts=new Timestamp(new Date().getTime());这样我们就可以得到时间比较具体的一个类型转换!!! 在开发web应用中,针对 ...

  9. 将图片打印到word中

    1.生成模板文件 工具类: package com.sfec.snmgr.track.utils;import com.alibam.core.wechat.util.QRCodeUtil;impor ...

  10. pop和push等使用方法,every和some、join

    push  在最前面添加一个元素 pop  移除最后一个元素 shift  移除第一个元素 unshift  放入一个元素,且排在最前 arr.splice(2,2)//移除从指定下标 slice(2 ...