Submission #1281236

#TimeUsernameProblemLanguageResultExecution timeMemory
1281236tunademayoMarathon Race 2 (JOI24_ho_t3)C++20
0 / 100
0 ms332 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; long long L; if (!(cin >> N >> L)) return 0; vector<long long> X(N); for (int i = 0; i < N; ++i) cin >> X[i]; // compress positions: map pos -> count map<long long,int> cntmap; for (auto x : X) cntmap[x]++; vector<long long> pos; vector<int> cnts; for (auto &p : cntmap) { pos.push_back(p.first); cnts.push_back(p.second); } int M = (int)pos.size(); auto simulate_order = [&](long long S, long long G, bool goLeftFirst)-> long long { // build left/right indices relative to S vector<int> left_idx, right_idx; for (int i = 0; i < M; ++i) { if (pos[i] <= S) left_idx.push_back(i); else right_idx.push_back(i); } vector<int> visit; visit.reserve(M); if (goLeftFirst) { for (int i = (int)left_idx.size() - 1; i >= 0; --i) visit.push_back(left_idx[i]); for (int i = 0; i < (int)right_idx.size(); ++i) visit.push_back(right_idx[i]); } else { for (int i = 0; i < (int)right_idx.size(); ++i) visit.push_back(right_idx[i]); for (int i = (int)left_idx.size() - 1; i >= 0; --i) visit.push_back(left_idx[i]); } ll time = 0; ll curPos = S; ll carrying = 0; vector<bool> picked(M, false); // simulate visiting in this fixed order; pick only when we "visit" that position for (int idx : visit) { long long nextP = pos[idx]; long long d = llabs(curPos - nextP); // movement cost: (carrying + 1) seconds per meter time += d * (carrying + 1); // arrive, pick all balls at nextP carrying += cnts[idx]; time += cnts[idx]; // pick cost (1s per ball) picked[idx] = true; curPos = nextP; } // after collected all balls, move to G carrying all balls long long dlast = llabs(curPos - G); time += dlast * (carrying + 1); return time; }; int Q; cin >> Q; for (int qi = 0; qi < Q; ++qi) { long long S, G, Tlim; cin >> S >> G >> Tlim; long long t1 = simulate_order(S, G, true); long long t2 = simulate_order(S, G, false); long long best = min(t1, t2); if (best <= Tlim) cout << "Yes\n"; else cout << "No\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...