Official
B - Making Triangle Editorial by satashun
\(N \leq 100\) なので、全ての \((i, j, k)\) の組が実際に条件を満たすかどうかを試すことができます。 三角形の成立条件は、\(3\) 辺の長さが \(a, b, c\) であるとき
- \(a + b > c\)
- \(b + c > a\)
- \(c + a > b\)
を満たすことであるので、 \(L_i, L_j, L_k\) が - 全て異なること - 上述の条件を満たすこと
の\(2\) つをチェックすれば、時間計算量は \(\mathrm{O}(N^3)\) でこの問題を解くことができます。
余談ですが、\(L\) を初めにソートして \(L_1 \leq L_2, \cdots, \leq L_N\) を満たすと仮定することで、三角形の条件は \(L_i + L_j > L_k\) のみをチェックすれば良いことになります。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int N;
cin >> N;
vector<int> vec(N);
for (int i = 0; i < N; ++i) cin >> vec[i];
sort(vec.begin(), vec.end());
int ans = 0;
for (int i = 0; i < N; ++i) {
for (int j = 0; j < i; ++j) {
for (int k = 0; k < j; ++k) {
if (vec[k] != vec[j] and vec[i] != vec[j] and
vec[k] + vec[j] > vec[i]) {
ans++;
}
}
}
}
cout << ans << endl;
return 0;
}
posted:
last update: