AOJ : 2298 - Starting Line
問題概要
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2298
日本語の問題文があるので, 説明省略です.
アルゴリズム
効率よく解こうとすると非常に面倒なので, 1メートルごと進みながらシミュレートするのがラクかと思います.
この問題で, 一番気を付けなければならないケースは, 親切にもサンプルの2番目に入れてくれているので, これさえ通ればACできるでしょう.
やらかしたミス
- 読解ミスして, タイムロス
- 1メートルごとシミュレートできないと思って, ごちゃごちゃなコードを書こうとしていた.
プログラム
#define REP(i,a,b) for(int i=a;i<b;i++) #define rep(i,n) REP(i,0,n) int main(void){ int n,k,t,u,v,l; int d[202]; bool flg[10002]; //ある位置に人参があるかどうか while(cin>>n>>k>>t>>u>>v>>l){ memset(flg,0,sizeof(flg)); rep(i,n){ cin>>d[i]; flg[d[i]] = true; } int pos = 0; //現在の位置 int rem = 0; //速さvで進める残り距離 int hav = 0; //現在持っている人参の数 double ans = 0; while(pos < l){ if(flg[pos]){ if(hav == k){ rem = t * v; } else{ hav++; if(rem == 0){ rem = t * v; hav--; } } ans += 1.0 / v; rem--; if(rem == 0 && hav > 0){ rem = t * v; hav--; } } else{ if(rem > 0){ ans += 1.0 / v; rem--; if(rem == 0 && hav > 0){ rem = t * v; hav--; } } else{ ans += 1.0 / u; } } pos++; } printf("%.7f\n",ans); } }