TopCoder SRM 372 Div1 Easy RoadConstruction
問題
n本の車線のそれぞれに車の列がある。
車は以下のようにして順に車線から出る。
- 同じ車線で、自分より前に車がいる車は出られない
- より低い番号の車線に、出ようとしている車がいる車は出られない
- 最初自分が車線の最初にきたら、一度だけより高い番号の車線の車に道をゆずる
- 以上のどれにも該当しない車が出る。
このとき、'D'の車の前に車線から出る車は何台か、求めよ。
制約条件
車線の数≦50
それぞれの車線にいる車の数≦50
車は一文字のアルファベットで表される。別の車が同一のアルファベットを持つ場合がある。
ソースコード
set<int> s; vector<vi> c; int func(int a,int b){ for(;a<c.size()&&c[a].empty();a++); if(a==c.size())return -1; if(s.count(c[a][0])){ int res=c[a][0]; c[a].erase(c[a].begin()); return res; } s.insert(c[a][0]); int res=func(a+1,b); if(res==-1){ res=c[a][0]; c[a].erase(c[a].begin()); return res; } return res; } class RoadConstruction { public: int getExitTime(vector <string> currentLanes) { int a=0; c=vector<vi>(currentLanes.size()); map<int,char> ch; rep(i,currentLanes.size())rep(j,currentLanes[i].size()){ c[i].pb(i*100+j); ch[i*100+j]=currentLanes[i][j]; } s.clear(); for(;;){ if(ch[func(0,0)]=='D')return a; a++; } } };