포스트

BOJ 19766 Доставка футболок

sorohue가 PS하는 블로그

BOJ 19766 Доставка футболок

문제 링크입니다.

문제 요약

$0$초에 시작해, $1$번 집부터 $N$번 집까지 다음과 같은 방법으로 순서대로 방문합니다.

  • $s_i$초 동안 $i$번 집으로 이동합니다.
  • $i$번 집 앞에서 최대 $k$초까지 대기합니다.
  • 집주인은 $z_i$초 이후로 집 앞에서 대기합니다. 만약 집주인과 만났다면, $t_i$초를 대기한 후 다음 집으로 출발합니다.
  • 집주인을 만나지 못하고 $k$초가 지났다면 다음 집으로 출발합니다.

풀이

문제에서 주어진 대로 시뮬레이션 해주면 쉽게 해결할 수 있습니다. $s_i$ 조건 상 64비트 정수 자료형을 사용해야 할 수 있습니다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
using pll = pair<ll, ll>;
ll s[50505];
int main(){
	cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
	ll n, k, t; cin >> n >> k >> t;
	ll ans = 0;
	for(int i = 0; i < n; i++) cin >> s[i];
	for(int i = 0; i < n; i++){
		ll z; cin >> z;
		ans += s[i];
		if(ans+k >= z){
			ans = max(ans, z);
			ans += t;
		}
		else ans += k;
	}
	cout << ans;
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.