結果
| 問題 |
No.2140 Triangle
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-12-02 21:21:39 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 6 ms / 2,000 ms |
| コード長 | 3,033 bytes |
| コンパイル時間 | 4,077 ms |
| コンパイル使用メモリ | 251,012 KB |
| 最終ジャッジ日時 | 2025-02-09 03:18:51 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 28 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#include <atcoder/all>
using namespace atcoder;
using ll = long long;
using vll = vector<ll>;
using vvll = vector<vll>;
using vvvll = vector<vvll>;
using vvvvll = vector<vvvll>;
using vvvvvll = vector<vvvvll>;
using vvvvvvll = vector<vvvvvll>;
using vb = vector<bool>;
using vvb = vector<vb>;
using vvvb = vector<vvb>;
using vvvvb = vector<vvvb>;
using vd = vector<double>;
using vvd = vector<vd>;
using vvvd = vector<vvd>;
using vvvvd = vector<vvvd>;
using vvvvvd = vector<vvvvd>;
#define all(A) A.begin(),A.end()
#define ALL(A) A.begin(),A.end()
#define rep(i, n) for (ll i = 0; i < (ll) (n); i++)
using pqr = priority_queue<pair<ll, ll>, vector<pair<ll, ll>>, greater<pair<ll, ll>>>;
template<class T>
bool chmax(T& p, T q, bool C = 1) {
if (C == 0 && p == q) {
return 1;
}
if (p < q) {
p = q;
return 1;
}
else {
return 0;
}
}
template<class T>
bool chmin(T& p, T q, bool C = 1) {
if (C == 0 && p == q) {
return 1;
}
if (p > q) {
p = q;
return 1;
}
else {
return 0;
}
}
ll gcd(ll(a), ll(b)) {
if (a == 0)return b;
if (b == 0)return a;
ll c = a;
while (a % b != 0) {
c = a % b;
a = b;
b = c;
}
return b;
}
ll sqrtz(ll N) {
ll L = 0;
ll R = sqrt(N) + 10000;
while (abs(R - L) > 1) {
ll mid = (R + L) / 2;
if (mid * mid <= N)L = mid;
else R = mid;
}
return L;
}
template <typename T>
class ConvexHullTrick {
public:
void add(T a, T b) {
a = -a, b = -b;
auto m = lines.insert({a, b, 0});
auto l = m, r = m;
++r;
while (update(m, r)) {
r = lines.erase(r);
}
if (l != lines.begin() && update(--l, m)) {
m = lines.erase(m);
update(l, m);
}
m = l;
while (l != lines.begin() && (--l)->p >= m->p) {
update(l, lines.erase(m));
m = l;
}
}
T get(T x) const {
assert(!lines.empty());
auto it = *lines.lower_bound(x);
return -(it.a * x + it.b);
}
private:
struct Line {
mutable T a, b; // ax + b
mutable double p; // intersection point with the next line
bool operator<(const Line& o) const { return a < o.a; }
bool operator<(T x) const { return p < x; }
};
using iterator = typename std::multiset<Line, std::less<>>::iterator;
static constexpr double INF = std::numeric_limits<double>::max() / 2;
std::multiset<Line, std::less<>> lines;
bool update(iterator x, iterator y) const {
if (y == lines.end()) {
x->p = INF;
return false;
}
if (x->a == y->a) {
x->p = (x->b > y->b ? INF : -INF);
} else {
x->p = 1.0 * (y->b - x->b) / (x->a - y->a);
}
return x->p >= y->p;
}
};
int main() {
ll N,E,T;
cin>>N;
cout<<(2*N)-1<<endl;
}