【LightOJ】1307 - Counting Triangles(二分)
2016-09-05 16:06
323 查看
点击打开题目
1307 - Counting Triangles
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.
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].
问能组成的三角形数。用二分查找计数就行了,数据不大。
代码如下:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <map>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define CLR(a,b) memset(a,b,sizeof(a))
#define LL long long
#define PI acos(-1.0)
int main()
{
int u;
int n;
int Case = 1;
int num[2016];
scanf ("%d",&u);
while (u--)
{
scanf ("%d",&n);
for (int i = 1 ; i <= n ; i++)
scanf ("%d",&num[i]);
printf ("Case %d: ",Case++);
sort(num+1 , num+1+n);
int ans = 0;
for (int i = 1 ; i < n ; i++)
{
for (int j = i + 1 ; j <= n ; j++)
ans += lower_bound(num+1+j , num+1+n , num[i]+num[j]) - 1 - num - j;
}
printf ("%d\n",ans);
}
return 0;
}
1307 - Counting Triangles
PDF (English) | Statistics | Forum |
Time Limit: 2 second(s) | Memory Limit: 32 MB |
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 |
代码如下:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <map>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define CLR(a,b) memset(a,b,sizeof(a))
#define LL long long
#define PI acos(-1.0)
int main()
{
int u;
int n;
int Case = 1;
int num[2016];
scanf ("%d",&u);
while (u--)
{
scanf ("%d",&n);
for (int i = 1 ; i <= n ; i++)
scanf ("%d",&num[i]);
printf ("Case %d: ",Case++);
sort(num+1 , num+1+n);
int ans = 0;
for (int i = 1 ; i < n ; i++)
{
for (int j = i + 1 ; j <= n ; j++)
ans += lower_bound(num+1+j , num+1+n , num[i]+num[j]) - 1 - num - j;
}
printf ("%d\n",ans);
}
return 0;
}
相关文章推荐
- lightoj 1307 Counting Triangles (二分)
- LightOJ 1307【暴力 二分】
- 【LightOJ 1307 + 二分】
- LightOj 1307 - Counting Triangles(二分)
- Lightoj 1307 二分
- lightoj 1307 Counting Triangles | 二分/暴力
- LightOJ1076->二分
- LightOJ 1138 - Trailing Zeroes (III)【二分】
- LightOJ 1097 - Lucky Number [线段树二分前缀和构造数列]
- Lightoj 1043 - Triangle Partitioning【二分】
- Lightoj 1138【二分 + 求 N! 的后导零个数】
- LightOJ--1076--Get the Containers(二分好题)
- lightoj 1048 - Conquering Keokradong 【二分 + 贪心】
- lightOJ 1132 Summing up Powers(矩阵 二分)
- LightOJ Trailing Zeroes (III) 1138【二分搜索+阶乘分解】
- LightOJ - 1138 (二分)
- lightoj1137【二分】
- lightoj 1152 - Hiding Gold 【奇偶建二分图 求最大匹配】
- LightOJ - 1156-Jumping Frogs (二分+最大流+拆点)
- Lightoj 1235 - Coin Change (IV) 【二分】