// Problem H : Ramen Shop #include #include #include #include using namespace std; class Event{ public: // イベント発生時刻,関連するグループ,イベントの種類 int time, group, type; Event(int t, int g, int p) : time(t), group(g), type(p) {} bool operator < (const Event &e) const { return make_pair(time,type) > make_pair(e.time,e.type); } }; int main(){ int n, m, t; int c[100], pos[10000], T[10000], P[10000], W[10000], E[10000]; int seat[100][100]; int left[100], right[100], seq[100]; bool out[10000], in[10000]; double score[10000]; while(cin >> n >> m >> t, n){ for(int i=0;i> c[i]; memset(pos, -1, sizeof(pos)); memset(out,false,sizeof(out)); memset(in, false,sizeof(in)); memset(seat, -1, sizeof(seat)); priority_queue qu; queue wait; for(int i=0;i> T[i] >> P[i] >> W[i] >> E[i]; // 入店イベント qu.push(Event(T[i],i,1)); // 客が帰ってしまうイベント qu.push(Event(T[i]+W[i],i,3)); } while(!qu.empty()){ Event e = qu.top(); qu.pop(); // 食べ終えた客が帰る if(e.type == 0){ for(int i=0;i=0;j--){ if(seat[i][j]!=-1) right[j] = -1; else if(right[j+1]==10000) right[j] = 10000; else right[j] = right[j+1]+1; } // 連続してあいている席の数を計算する(左側に連続して何個の空席があるか) for(int j=0;j=0;j--){ if(seat[i][j]!=-1) right[j] = -1; else if(right[j+1]==10000) right[j] = 10000; else right[j] = right[j+1]+1; } for(int j=0;j