Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

lmlmlm

Codeforces Round #792 (Div. 1 + Div. 2) 본문

문제풀기

Codeforces Round #792 (Div. 1 + Div. 2)

lml 2022. 5. 22. 22:47

A에 의해서 본 손해가 이만저만이 아니라 거두절미하고 시작.

 

A. Digit Minimization

 

k = 2일 때에 첫 번째 숫자는 답으로 제출할 수 없다.

 

B. Z mod X = C

 

주어진 숫자에 대해서, a + b + c, b + c, c를 제출하면 된다.

이 문제 또한 문제의 조건을 잘못 읽어 (x, y, z < 1e8) 상당히 고생했다.

왜 굳이 a, b, c < 1e8이라고 했는지는 아직도 의문이다.

 

C. Column Swapping

 

우선 주어지는 table 자체가 good한지 확인한다.

-> good에서부터 벗어나는 열들을 set이든 뭐든 아무튼 저장해 둔다.

이때 good에서 벗어나는 열들의 개수가 3개 이상이라면 무조건 불가능하다.

벗어나는 열 두 개를 바꿨을 때에 이제 good한지만 확인해주면 된다.

https://codeforces.com/contest/1684/submission/157697003

 

D. Traps

 

무조건 K개의 점프를 모두 사용하는 것이 이득이다.

그렇다면 어떤 지점 i에서 점프를 사용하면, 그로 인한 이득이 a[i] - (n - i - 1)이라고 생각해도 무방하다.

물론 i < j 인  j에서 또 점프를 쓴다면 (n - i - 1)만큼 비용이 증가하는 것이 아니라 (n - i - 2)만큼 증가하며

k < i인 k에서 이미 점프를 썼다면 a[i] + 1만큼의 비용이 0이 되는 것이다.

하지만 어차피 K번의 점프를 할 것이니 점프간의 상호작용에 의한 비용변화는 k*(k - 1)/2로 일정하다.

따라서 제일 많은 비용을 절감할 수 있는 k개를 선택해주면 된다.

https://codeforces.com/contest/1684/submission/157701448

 

E. MEX vs DIFF

 

만들 수만 있다면 MEX값을 최대인 상황이 무조건 이득인 상태이다.

-> 이미 중복되는 애를 이용하여 MEX를 증가시켰을 경우 DIFF가 1 증가하고 MEX가 1 이상 증가하여 이득

-> 중복되지 않는 애를 이용하여 MEX를 증가시켰을 경우 DIFF는 유지되고 MEX는 1 이상 증가하여 이득

-> 따라서 MEX를 증가시키는 행위는 무조건 이득이고 MEX를 많이 늘려놓는 것이 좋다.

MEX를 증가시킬 때 위를 보면 알겠지만 중복되지 않는 애를 이용하는 것이 이득이다.

-> 따라서 MEX보다 큰 숫자들 중에서 개수가 적은 애들부터 이용하여 MEX를 증가시켜주면 된다.

https://codeforces.com/contest/1684/submission/157695549

 

하지만, 대부분의 사람들이 위의 풀이를 생각했겠지만, 다들 한 번씩 틀려서인지 다른 풀이들을 하나씩 내놨다.

사실 에디토리얼도 모든 MEX값들에 대한 DIFF값을 구해서 최솟값을 구했다.

이건 각자의 방법으로 잘 구하면 된다. (BIT든, segtree든, set을 잘 활용하든...)

 

F. Diverse segments

 

우선 [0, R]에 작업을 해주면 문제가 원하는 조건을 만족하게 되는 R을 우선 구해주자.

-> 모든 숫자 x에 대해서 [x', x]면 겹치는 원소가 하나도 없도록 하는 최대의 x'들을 모두 구해준다.

-> 그러면 문제에서 주어지는 [l, r]에 대해서 r' >= l인 모든 r'의 최댓값이 R이 된다.

 

이제 L = 0이었던 상태에서 L을 하나씩 증가시키면 된다.

새로운 구간들이 [L + 1, R]이라고 하자. 

a[L]이 이제 변환시키는 구간에서 벗어난다면 

i) [R + 1, r] 중에서 a[L]과 겹치는 애가 없다. ii) [l, L) 중에서 a[L]과 겹치는 애가 없다.

-> 이 두 조건만 확인해주면서 L과 R을 적당히 증가시켜주며 길이의 최솟값을 구하면 된다.

https://codeforces.com/contest/1684/submission/157996083

 

G. Euclid Guess

 

이 문제는 정말 10분만 일찍 봤어도 풀 수 있었을 것이다.

X를 그대로 뱉어낼 수 있는 방법 : 2*X, 3*X를 이용한다.

X를 X의 약수인 d를 활용하여 뱉어낼 수 있는 방법 : 2*X + d, X + d를 이용한다.

-> 따라서 3*X <= m인 애들을 left에, 나머지는 right에 박아두고 이분매칭을 해주면 된다.

https://codeforces.com/contest/1684/submission/157973556

 

H. Hard Cut

 

비트가 한 개라도 있는 string이 주어진다면 무조건 가능하다.

'문제풀기' 카테고리의 다른 글

Codeforces Round #794 (Div. 1)  (0) 2022.06.06
Codeforces Round #796 (Div. 1)  (0) 2022.06.06
Codeforces Round #789 (Div. 2)  (0) 2022.05.16
Codeforces Round #783 (Div. 1)  (0) 2022.05.04
AtCoder Beginner Contest 249  (0) 2022.05.02
Comments