[ABC143D] Triangles

Posted top_secret的小尛博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[ABC143D] Triangles相关的知识,希望对你有一定的参考价值。

\\(n\\)个长为\\(a_i\\)的棍子能拼出多少种不同的三角形?
\\(n \\le 2\\times 10^3\\)

传送门

解答

注意,使用不同棍子算作不同的三角形。

最初的想法

枚举两边边长\\(a\\le b\\),然后(用组合数)计算\\(b\\le c\\)有多少种可能。\\(O(n^2)\\)

程序比较复杂。但是跑得比较快。

注意\\(2000^3\\)会爆int

更简单的想法

先将棍子按长度排序,直接枚举用了第\\(i<j\\)根棍子,求合法的\\(k>j\\)的个数。

易知,只需满足\\(a_k < a_i+a_j\\)即可。使用lower_bound即可做到\\(O(n^2\\log n)\\)的复杂度。(当然也可以\\(O(n^2)\\)

#include <bits/stdc++.h>
using namespace std;

int n, a[2001], ans;

int main() {
	cin >> n;
	for (int i = 0; i < n; ++i)
		cin >> a[i];
	sort(a, a+n);
	for (int i = 0; i < n; ++i)
		for (int j = 0; j < i; ++j)
			ans += upper_bound(a, a+n, a[i]+a[j]-1)-a-i-1;
	cout << ans;
}

以上是关于[ABC143D] Triangles的主要内容,如果未能解决你的问题,请参考以下文章

为啥保守光栅化无法为某些三角形调用片段着色器?

[linux][c/c++]代码片段01

python+spark程序代码片段

GL_TRIANGLES 有效,但 GL_QUADS 不显示任何内容

GL_TRIANGLES 有效,但 GL_QUADS 不显示任何内容

CF15E Triangles