3618:Exploration
keyword
シミュレーション C++
概要
数直線上に石が置かれていて、人が原点にいる。人は原点に近い石を拾いにいく。ある時間内に石をいくつ拾えるか求める問題。
人の動き方は完全に決まっているので、シミュレーションするだけ。
int main(){ vector<int> plus, minus; int i, n, t, x, cur=0, ans=0; t = readint(); n = readint(); plus.reserve(50001); minus.reserve(50001); REP(i,n){ x = readint(); if(x>=0) plus.push_back(x); else minus.push_back(x); } sort(ALL(plus), greater<int>()); sort(ALL(minus)); while(!(plus.empty() && minus.empty()) && t>=0){ if(plus.empty()){ t -= abs(cur-minus.back()); cur = minus.back(); minus.pop_back(); } else if(minus.empty()){ t -= abs(cur-plus.back()); cur = plus.back(); plus.pop_back(); } else if(abs(minus.back()) > plus.back()){ t -= abs(cur-plus.back()); cur = plus.back(); plus.pop_back(); } else{ t -= abs(cur-minus.back()); cur = minus.back(); minus.pop_back(); } if(t < 0) break; ans++; } printf("%d\n",ans); }