순간을 성실히, 화려함보단 꾸준함을

[ boj : 22234 ] 가희와 은행 본문

알고리즘,SQL/백준,BOJ

[ boj : 22234 ] 가희와 은행

폭발토끼 2022. 1. 15. 20:55

https://www.acmicpc.net/problem/22234

 

22234번: 가희와 은행

가희는 창구가 하나인 은행을 운영하고 있습니다. 가희의 은행이 영업을 시작했을 때, 대기 줄에는 손님이 N명 있습니다. [그림 1] 카운터 직원과 N명의 손님 x번 손님에 대한 정보는 x번 손님의

www.acmicpc.net

해설 : 시뮬레이션 문제인데. 이런 문제는 큐를 사용하는 것보단 조건(Order) 와 같은 걸 추가해서 priority_queue로 해결하는 것이 훨씬 빠르고 유리하게 해결할 수 있는 것 같습니다.

#include<bits/stdc++.h>

using namespace std;

struct info {
	int p, t, c,order;
	bool operator<(const info& cur) const {
		if (c == cur.c)return order > cur.order;
		return c > cur.c;
	}
};

void solve();

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int t = 1;
	while (t--)solve();
	return 0;
}
void solve()
{
	int n, t, w;
	priority_queue<info> pq;
	cin >> n >> t >> w;
	int x, y;
	for (int i = 0; i < n; i++) {
		cin >> x >> y;
		pq.push({ x,y,0,i });
	}
	int m,z;
	cin >> m;
	for (int i = 0; i < m; i++) {
		cin >> x >> y >> z;
		pq.push({ x,y,z,n + i });
	}
	int i = 0;
	vector<int> ans;
	while (i < w)
	{
		info cur = pq.top();
		pq.pop();

		for (int j = 0; j < min(t, cur.t)&&i+j<w; j++) {
			ans.push_back(cur.p);
		}

		if (t < cur.t) {
			pq.push({ cur.p,cur.t - t,i + t,(int)1e9 });
			i += t;
		}
		else {
			i += cur.t;
		}
	}
	for (int u : ans)cout << u << "\n";
}

'알고리즘,SQL > 백준,BOJ' 카테고리의 다른 글

[ boj : 1301 ] 비즈 공예  (0) 2022.01.17
[ boj : 22236 ] 가희와 비행기  (0) 2022.01.16
[ boj : 22232 ] 가희와 파일 탐색기  (0) 2022.01.10
[ boj : 22233 ] 가희와 키워드  (0) 2022.01.09
[boj : 1339 ] 단어 수학  (0) 2022.01.07