[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的主要内容,如果未能解决你的问题,请参考以下文章
GL_TRIANGLES 有效,但 GL_QUADS 不显示任何内容