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. 11.13python第一周周末练习

    2.请输出你的基本个人信息 3.结合逻辑判断,写一个不同学生分数,输出良好,优秀,分数不及格 循环输出 字符串的替换. 以什么开头startwith 以什么结尾endwith 列表转为字符串 字符串转 ...

  2. Go 性能提升tips--边界检查

    1. 什么是边界检查? 边界检查,英文名 Bounds Check Elimination,简称为 BCE.它是 Go 语言中防止数组.切片越界而导致内存不安全的检查手段.如果检查下标已经越界了,就会 ...

  3. 19. 删除链表的倒数第 N 个结点

    目录 19.删除链表的倒数第N个节点 题目 题解-暴力 题解-哈希表 题解-双指针 19.删除链表的倒数第N个节点 题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 输入:he ...

  4. A Child's History of England.36

    CHAPTER 11 ENGLAND UNDER MATILDA AND STEPHEN The King was no sooner dead than all the plans and sche ...

  5. 从源码看Thread&ThreadLocal&ThreadLocalMap的关系与原理

    1.三者的之间的关系 ThreadLocalMap是Thread类的成员变量threadLocals,一个线程拥有一个ThreadLocalMap,一个ThreadLocalMap可以有多个Threa ...

  6. JPA和事务管理

    JPA和事务管理 很重要的一点是JPA本身并不提供任何类型的声明式事务管理.如果在依赖注入容器之外使用JPA,事务处理必须由开发人员编程实现. 123456789101112UserTransacti ...

  7. shell脚本实现openss自建CA和证书申请

    #!/bin/bash # #******************************************************************** #Author: Ma Xue ...

  8. highchars操作集合

    一.tooltip 与鼠标指针的距离想调整tooltip和鼠标指针的距离,官方api 和中文api中都没写,只有轴 label.distance . 但我觉得应该有这个,看源码果然有 tooltip ...

  9. JQuery 和 CSS 等选择器:

    JQuery 选择器: CSS 选择器:

  10. 🏆【Alibaba中间件技术系列】「RocketMQ技术专题」Broker配置介绍及发送流程、异常(XX Busy)问题分析

    参考资料 Rocketmq官网:http://rocketmq.apache.org/ Rocketmq的其它项目:https://github.com/apache/rocketmq-externa ...