4595 priority_queue<player, vector<player>, greater<player>> normal_players;
4596 priority_queue<player, vector<player>, greater<player>> vip_players;
4599 normal_players.push(nop);
4600 vip_players.push(nop);
4601 for(
unsigned i = 0; i < n; i++) {
4602 string arrival_time_str;
4605 cin >> arrival_time_str >> p >> tag;
4606 auto ply =
player(arrival_time_str, p, tag);
4608 vip_players.push(ply);
4610 normal_players.push(ply);
4616 vector<unsigned> table_cnt(k + 1, 0);
4617 priority_queue<table, vector<table>, greater<table>> normal_tables;
4618 priority_queue<table, vector<table>, greater<table>> vip_tables;
4619 normal_tables.push({0,
INF});
4620 vip_tables.push({0,
INF});
4621 unordered_set<unsigned> vipid;
4622 for(
unsigned i = 0; i < m; i++) {
4627 for(
unsigned i = 1; i <= k; i++) {
4628 if(
static_cast<unsigned int>(vipid.contains(i)) != 0U) {
4629 vip_tables.push({i, 8 * 60 * 60});
4631 normal_tables.push({i, 8 * 60 * 60});
4634 vector<player> players;
4635 while(normal_players.size() > 1 || vip_players.size() > 1) {
4636 auto np = normal_players.top();
4637 auto vp = vip_players.top();
4638 unsigned arrive_time = min(np.arrival_time, vp.arrival_time);
4639 while(normal_tables.top().end_time < arrive_time) {
4640 auto t = normal_tables.top();
4641 normal_tables.pop();
4642 t.end_time = arrive_time;
4643 normal_tables.push(t);
4645 while(vip_tables.top().end_time < arrive_time) {
4646 auto t = vip_tables.top();
4648 t.end_time = arrive_time;
4651 auto nt = normal_tables.top();
4652 auto vt = vip_tables.top();
4653 unsigned end_time = min(nt.end_time, vt.end_time);
4655 if(end_time >= 21 * 60 * 60) {
4659 if(vp.arrival_time <= end_time && vt.end_time == end_time) {
4660 assign(vip_players, vip_tables, players, table_cnt);
4661 }
else if(np.arrival_time < vp.arrival_time) {
4663 assign(normal_players, vip_tables, players, table_cnt);
4665 assign(normal_players, normal_tables, players, table_cnt);
4669 assign(vip_players, vip_tables, players, table_cnt);
4671 assign(vip_players, normal_tables, players, table_cnt);
4675 sort(players.begin(), players.end());
4676 for(
auto &player: players) {
4677 cout <<
timefmt(player.arrival_time) <<
' ' <<
timefmt(player.start_time) <<
' ' << player.waiting_time << endl;
4679 cout << table_cnt[1];
4680 for(
unsigned i = 2; i <= k; i++) {
4681 cout <<
' ' << table_cnt[i];
void assign(priority_queue< player, vector< player >, greater< player > > &players, priority_queue< table, vector< table >, greater< table > > &tables, vector< player > &vec, vector< unsigned > &table_cnt)
string timefmt(unsigned t)