結果
| 問題 | 
                            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;
}