結果
| 問題 |
No.33 アメーバがたくさん
|
| コンテスト | |
| ユーザー |
data9824
|
| 提出日時 | 2015-06-15 02:35:53 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,370 bytes |
| コンパイル時間 | 924 ms |
| コンパイル使用メモリ | 83,088 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-09-24 10:10:41 |
| 合計ジャッジ時間 | 1,460 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 5 WA * 6 |
ソースコード
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <algorithm>
using namespace std;
int main() {
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];
}
map<long long, set<long long> > positions;
for (int i = 0; i < n; ++i) {
positions[(0x80000000LL + x[i]) % d].insert(x[i]);
}
long long result = 0LL;
for (map<long long, set<long long> >::const_iterator it = positions.begin();
it != positions.end();
++it) {
vector<long long> distances;
set<long long>::const_iterator itSet = it->second.begin();
for (;;) {
set<long long>::const_iterator itNext = itSet;
++itNext;
if (itNext == it->second.end()) {
break;
}
distances.push_back(*itNext - *itSet);
itSet = itNext;
}
sort(distances.begin(), distances.end());
size_t amebaCount = it->second.size();
result += amebaCount;
long long lastJoining = 0;
for (size_t i = 0; i < distances.size(); ++i) {
long long joining = min(t, distances[i] / (2 * d));
result += 2 * amebaCount * (joining - lastJoining);
if (joining == distances[i] / (2 * d)) {
--result;
}
lastJoining = joining;
if (lastJoining == t) {
break;
}
--amebaCount;
}
if (lastJoining < t) {
result += 2 * amebaCount * (t - lastJoining);
}
}
cout << result << endl;
return 0;
}
data9824