結果
| 問題 | No.33 アメーバがたくさん |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-02-19 14:50:02 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 978 bytes |
| コンパイル時間 | 2,085 ms |
| コンパイル使用メモリ | 207,348 KB |
| 最終ジャッジ日時 | 2025-01-18 22:50:50 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 11 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
long long d, t;
cin >> n >> d >> t;
vector<long long> x(n);
for (int i = 0; i < n; i++)
cin >> x[i];
set<long long> mod;
for (int i = 0; i < n; i++)
mod.insert((x[i] % d + d) % d);
long long ret = 0;
for (long long m: mod) {
vector<long long> y;
for (int i = 0; i < n; i++)
if ((x[i] % d + d) % d == m)
y.push_back(x[i]);
sort(y.begin(), y.end());
vector<pair<long long, long long> > v;
for (int i = 0; i < y.size(); i++) {
long long l = y[i] - d * t;
long long r = y[i] + d * t;
if (v.empty())
v.emplace_back(l, r);
else if (l <= v.back().second)
v.back().second = max(v.back().second, r);
else
v.emplace_back(l, r);
}
for (auto &pr: v) {
ret += (pr.second - pr.first) / d + 1;
}
}
cout << ret << endl;
return 0;
}