Many Segments
問題
C – Many Segments
プログラミング初級者から上級者まで楽しめる、競技プログラミングコンテストサイト「AtCoder」。オンラインで毎週開催プログラミングコンテストを開催しています。競技…
記録
- 2022/3/25 解法わからず
解法
- 開区間は、\(0.1\) を加えたり、引いたりして調整する。
- \(N \leq 2000\)なので、全通り\((N ^ 2)\)試すことができる。
コード例
#include <bits/stdc++.h> using namespace std; #include <atcoder/all> using namespace atcoder; using ll = long long; using P = pair<double, double>; #define rep(i, n) for(int i = 0; i < (n); ++i) // using mint = modint998244353; // using mint = modint1000000007; // const int mod = 1000000007; // const ll INF = 1LL << 62; // const int INF = 1001001001; int main() { int N; cin >> N; vector<double> L(N); vector<double> R(N); rep(i, N) { int t, l, r; cin >> t >> l >> r; if(t == 1) { L[i] = l; R[i] = r; } else if(t == 2) { L[i] = l; R[i] = r - 0.1; } else if(t == 3) { L[i] = l + 0.1; R[i] = r; } else { L[i] = l + 0.1; R[i] = r - 0.1; } } ll ans = 0; rep(i, N) { for(int j = i + 1; j < N; ++j) { if(max(L[i], L[j]) <= min(R[i], R[j])) { ans++; } } } cout << ans << endl; return 0; }