結果
| 問題 |
No.33 アメーバがたくさん
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2018-11-03 12:48:55 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 3 ms / 5,000 ms |
| コード長 | 1,232 bytes |
| コンパイル時間 | 1,268 ms |
| コンパイル使用メモリ | 97,372 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-11-20 18:38:00 |
| 合計ジャッジ時間 | 2,017 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 11 |
ソースコード
#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
int main(){
int n;
ll d, t;
cin >> n >> d >> t;
// modulo, val
map<ll, vector<ll>> m;
map<ll, vector<pair<ll,ll>>> seg;
ll x[n];
for(int i = 0; i < n; i++) cin >> x[i];
sort(x, x+n);
for(int i = 0; i < n; i++){
ll modulo;
if(x[i] < 0) modulo = d - (abs(x[i])%d);
else modulo = x[i]%d;
m[modulo].push_back(x[i]);
}
for(auto p : m){
for(ll l : p.second){
seg[p.first].push_back({l-t*d, l+t*d});
}
}
for(auto p : seg){
auto it = seg[p.first].begin();
while(it != seg[p.first].end()){
auto next = it;
next++;
if(next == seg[p.first].end()) break;
if((*it).second >= (*next).first){
(*it).second = (*next).second;
seg[p.first].erase(next);
}else{
it++;
}
}
}
ll ans = 0;
for(auto p : seg){
for(auto q : p.second) ans += (q.second-q.first)/d + 1;
}
cout << ans << endl;
return 0;
}