티스토리 뷰

ps

codeforces round 817 (div.4)

logwns 2022. 9. 14. 21:49

A. Spell Check

 

 

문제 :

길이가 n인 문자열이 s가 있다. sT,i,m,u,r이 한 번씩만 있으면서 다른 나머지 문자가 없는지 알아보면 된다.

 

 

풀이 :

문자열의 각 문자들의 개수를 세주고 T,i,m,u,r이 한 번씩만 있는지 보면 된다.

 

 

코드 :

cpp
열기

 


 

B. Colourblindness

 

 

문제 :

2×n크기의 판에 3개의 색 r, g, b으로 채워져 있다. g와 b를 같은 색으로 볼 때 두 행이 같은지 알아보면 된다.

 

 

풀이 :

1행의 i번째 값이 r이면 1, g이거나 b이면 2라 하고,

2행의 i번째 값이 r이면 1, g이거나 b이면 2라 할 때 각 행의 i번째 값이 같은지 비교해 보면 된다.

 

 

코드 :

cpp
열기

 


C. Word Game

 

 

문제 :

3명의 사람이 단어를 n번 입력한다. 만약 입력한 단어가 한 번만 있었다면(3명 중 한 명만 단어를 입력) 3점을 얻고 두 번 있었다면(3명 중 2명이 단어를 입력) 1점을 얻고 3명 모두가 입력한 단어라면 점수를 얻지 못한다. 이때 각 3명의 사람이 얻은 점수를 구하면 된다.

 

 

풀이 :

map을 사용해서 한번 단어가 입력될 때마다 value값을 1씩 증가시켜 단어가 몇 번 입력됐는지를 알아보고 각 사람들의 점수를 구하면 된다.

 

 

코드 :

cpp
열기

 


 

D. Line

 

 

문제 :

n명의 사람이 일렬로 왼쪽 또는 오른쪽을 보고 서있다. 왼쪽을 보고 있는 사람은 첫 번째부터 자신의 바로 이전 위치까지의 사람을 볼 수 있고 오른쪽을 보고 있는 사람은 자신의 다음 사람부터 마지막 사람까지 볼 수 있다. 예를 들어 LRRLL이라면 각 위치에서 보이는 사람의 수는 [0,3,2,3,4]이고 n명의 사람들에 대한 값은 보이는 사람의 수의 합인 12가 된다. 각 사람이 바라보는 방향을 k번 변경할 수 있을 때 보이는 사람의 수가 최대 몇 명이 될 수 있는지 구하면 된다. (1kn)

 

 

풀이 :

i번째 사람이 L이라면 보이는 사람의 수는 i1이고 R이라면 ni이다. L에서 R로 바뀐다면 그 차이는 (ni)(i1)이고 R에서 L로 바뀐다면 그 차이는 (i1)(ni)이다. 이 값이 양수라면 보는 방향을 변경하는 것이 이득이고 아니라면 그냥 두는 게 낫다. 따라서 차이를 모두 우선순위 큐에 넣어서 양수일 때만 뽑아주면 된다. 처음 사람들이 볼 수 있는 사람들의 총 합에 양수일때만 값을 더하고 아니라면 이때까지 구한 값이 답이 된다.

 

 

코드 :

cpp
열기

 


 

E. Counting Rectangles

 

 

문제 :

n개의 직사각형이 있다. i번째 사각형의 세로, 가로 크기는 hi,wi이다. q개의 쿼리가 주어지고 각 쿼리에서 작은 사각형과 큰 사각형의 세로, 가로 크기 hs,ws,hb,wb가 주어질 때 각 n개의 사각형들이 작은 사각형을 포함하고 큰 사각형에 포함될 수 있는지 알아보면 된다. 포함한다는 것은 변이 겹치지 않게 완전히 포함되어야 한다. 즉 hs<hi<hb이고 ws<wi<wb이다. 이 조건을 만족하는 모든 사각형의 넓이(=nihiwi)를 구하면 된다.

 

 

풀이 :

각 쿼리마다 n개의 사각형을 전부 확인하면 O(nq)로 문제에서 n,q는 최대 105이므로 O(1010)이 되므로 시간 안에 구할 수 없다. di,j1 세로 길이 i, 1 가로길이 j인 사각형들 넓이의 합이라 하면 각 쿼리에 대한 답을 dhb1,wb1dhb1,wsdhs,wb1+dhs,ws의 식을 활용하여 O(1)에 구할 수 있다. 

 

예를 들어

3

2 1

2 3

3 2

1 1 3 4의 예제를 그림으로 표현해보면 아래의 그림처럼 구할 수 있다. (d와 1 1 3 4의 예제를 구하는 과정)

 

 

코드 :

cpp
열기

 


 

F. L-shapes

 

 

문제 :

n×m크기의 판에 ㄱ자 모형의 무늬가 각 변이나 꼭짓점을 공유하지 않고 잘 배치되어 있는지 알아보면 된다.

 

 

풀이 :

판에 ㄱ자 모형으로 표시된 문자의 개수를 세주고 판을 훑으면서 ㄱ자 모형인지 확인하고 맞다면 전체 개수에서 3을 빼준다. 끝까지 봤을 때 0이라면 적절하게 잘 배치되었다고 할 수 있다. 변이나 꼭짓점을 공유하는지의 여부는 ㄱ자를 구성하는 각 문자들을 기준으로 자신의 위치와 1씩 떨어진 거리의 문자들을 확인해서 의 수가 3인지를 확인해주면 된다.

 

 

코드 :

cpp
열기

 


 

G. Even-Odd XOR

 

 

문제 :

n이 주어질 때 길이가 n인 수열에서 짝수번째 원소들의 XOR값과 홀수번째 원소들의 XOR값이 같게 하는 수열을 찾으면 된다. 수열의 원소는 모두 다르고 2311보다 작은 음이 아닌 정수이다.

'ps' 카테고리의 다른 글

codeforces round 819 (div.1 + div.2) A-C  (0) 2022.09.22
codeforces round 818 (div.2) A-C  (0) 2022.09.21
educational codeforces round 134 (div.2)  (0) 2022.09.07
codeforces round 816 (div.2)  (0) 2022.09.06
codeforces round 815 (div.2)  (0) 2022.08.30
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/07   »
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 31
글 보관함