Q&A
前提
atcoder上のこちらの問題についての質問です。下のコードで問題を解こうとしたのですが、すべてACになりません。方針としては解説にある通り、左側の車両を貪欲的に埋めていく方針です。どこに漏れがあるのかご指摘いただけると幸いです。よろしくおねがいします。
該当のソースコード
C++
1#include <bits/stdc++.h> 2 3using namespace std; 4 5typedef long long ll; 6typedef long double ld; 7 8int N, M; 9vector<ll> X; 10 11bool C(ll t){ 12 vector<int> D(M); // 作業員iが担当できる右端の座標 13 for(int i = 0; i < M; ++i){ 14 ll l, r; //l...前の作業員が担当した電車の座標 15 if(i == 0){ 16 l = 0; 17 }else{ 18 l = D[i - 1]; 19 } 20 ll L = X[i] - l - 1; //L...左側への移動距離 21 if(t < L) return false; 22 r = min(X[i + 1] - 1, max(t - 2 * L + X[i], (t - L) / 2 + X[i])); 23 D[i] = r; 24 } 25 return D[M - 1] >= N; 26} 27 28int main(){ 29 ios::sync_with_stdio(false); 30 cin.tie(0); 31 cin >> N >> M; 32 X.resize(M); 33 for(int i = 0; i < M; ++i){ 34 cin >> X[i]; 35 } 36 sort(X.begin(), X.end()); 37 ll lb = -1, ub = 3e10; 38 while(ub - lb > 1){ 39 ll mid = (lb + ub) / 2; 40 if(C(mid)) ub = mid; 41 else lb = mid; 42 } 43 cout << ub << endl; 44}
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2023/02/01 00:39