본문 바로가기

코드포스

(37)
[Codeforces Round #806 (Div. 4)] E. Mirror Grid ※ 짝수의 경우 왼쪽 상단(2사분면)만 확인해주면 모든 셀을 방문할 수 있음. 홀수의 경우 중앙이 추가되기 때문에 x좌표나 y좌표 중 하나를 추가로 확인해주어 g셀을 제외한 모든 셀을 탐색하게 해야됨 (i 짝수의 경우 5/2 홀수가 되기 때문에 문제없다. 홀수의 경우 6/2 로 열을 한 번 더 탐색해준다.) ※ 중앙 셀을 제외한 모든 셀은 다음과 같이 이동한다. a좌표 - [0,0] -> [0,3] -> [3,3] -> [3,0] b좌표 - [0,1] -> [1,3] -> [3,2] -> [2,0] 홀수의 경우 c좌표 - [2,0] -> [0,2] -> [2, 4] -> [4,2] (x와 y는 처음의 좌표 [x,y] -> [y,x의 반대] -> [x의 반대, y의 반대] -> [y..
[Codeforces Round #784 (Div. 4)] H. Maximal AND ※. 작업을 통해 ai의 비트 중에 비트 1개를 1로 바꿀 수 있다.(or 연산) ※. 가장 최상위 비트부터 바꾸는 것이 이득이다. (j = 2, 4 ,8을 바꾸는 거 보다 j = 16을 바꾸는 것이 더 큰 값) ※. 1에서 n개 까지의 배열값에서 (0~30)번째 비트가 1인것의 개수를 세어준다. (비트가 겹친다면 k작업을 적게 수행하여 결과를 바꿀 수 있다.) ※. (n - (0~30)비트 개수를 저장한 배열)이 k보다 작다면 결과값을 바꿀 수 있다. (n = 3, k = 2, [8,4,2]이면 arr[0] = 0, arr[1] = 1, arr[2] = 1, arr[3] = 1이다. 3 - 1(arr[3])은 2이므로 k작업을 2번해서 4와 2를 모두 or 8 (100 -> 1100, 10 -> 101..
[Codeforces Round #784 (Div. 4)] E. 2-Letter Strings ※. a ~ k (0 ~ 15) 의 배열을 만든다.(배열을 두 개 만들어도 되고 이중배열로 만들어도 됨) ※. 문자를 하나 받을 때 마다 해당 문자의 아스키 코드 - 'a'의 아스키 코드를 증가시켜준다 (첫번째 글자의 배열 증가, 두번째 글자의 배열 증가를 같이 해줘야함) ※. 같은 문자가 있었다면 같은 문자가 나온 횟수(sub) 를 저장해준다. ※. 받은 문자의 (첫번째 글자가 나온 횟수 - sub) + (두번째 글자가 나온 횟수 - sub)를 해준다. ※. 정수 타입에 주의한다. long (N이 10만 -> aa가 5만 ab가 5만이라면 25억으로 int를 초과) import java.io.BufferedReader; import java.io.IOException; import java.io.Inp..
[Codeforces Round #790 (Div. 4)] E. Eating Queries ※ 섭취해야 하는 설탕의 양이(x) 모든 사탕의 합보다 크다면 -1을 출력 ※ 설탕의 양이 사탕의 합과 같다면 사탕의 갯수(n) n을 출력 ※ 사탕의 정보가 있는 배열을 정렬한 후 가장 설탕이 많은 사탕부터 사탕 갯수당 설탕의 양을 나타내는 배열을 만든다 (1,1,3,3,4,4,5,9) -> (9, 9+5, 9+5+4, 9+5+4+4, ... 9+5+4+4+3+3+1+1) ※ n, q가 150,000 이므로 nq가 아닌 q*log n 인 이분탐색으로 찾아야함 1.사탕 갯수마다 설탕의 합을 나타내는 dp배열을 생성 2. x가 sum(설탕의 합)보다 크면 -1 같으면 n 3. 나머지 경우는 이분탐색으로 dp배열을 탐색 import java.io.BufferedReader; import java.io.IOEx..
[Codeforces Round #786 (Div. 3)] C. Infinite Replacement ※ 문자열 s에 a가 있으면 'a'를 문자열 t로 대체 할 수 있다.(s = aaaa, t = abc -> abcaaa) ※ t가 "a" 라면 문자열의 수도 변하지 않고 그대로이기 때문에 기존의 s 문자 하나만 만들 수 있다 (1을 출력) ※ 문자열 t에 a가 하나 이상 들어가 있으면 t에 포함된 a를 통해 새로운 문자열을 무한히 만들 수 있다. (s = aaaa, t = abc -> abcaaa -> aabcaaa -> abcabcaaa -1을 출력) ※ t에 a가 포함되지 않았으면 기존 문자열 s의 'a'의 개수만큼 새로운 문자열을 만들 수 있다. (t에 a가 포함되지 않았으면 t = b로 생각해도 무방하다. 문자 개수당 2가지 선택지가 있고 이 경우의 수는 2^n aaa -> a와 b의 두가지 선택..
[Codeforces Round #784 (Div. 4)] D. Colorful Stamp ※ 'W'가 없는 연속된 picture 에서 모두 같은 색 stamp만 아니라면 picture를 만들 수 있다. (RRRRRR -> X RRBRRBR -> O 바깥쪽 부터 채워넣으면 됨) ※ n이 1일 때 주의 (R or B 가 오면 No를 출력하면 되지만 W가 올 경우 stamp를 쓸 필요가 없기 때문에 YES를 출력해야 한다) 1. w가 없는 문장에서 단어의 갯수를 세는 cnt, 각각의 색을 세는 r, b를 만든다 2. 단어의 수(cnt)가 r이나 b와 같다면(문장이 전부 같은 색) NO를 출력한다. 3. w로 끝나지 않을 경우 마지막 cnt를 r과 b로 비교해줘야 한다. import java.io.BufferedReader; import java.io.IOException; import java.i..
[April Fools Day Contest 2022] B. Mike's Sequence ※ Mike는 코드포스 관리자 MikeMirzayanov를 말하는 것이다. Mike 수열은 코드포스 레이팅을 말하는 것이다. ※ r(현재 레이팅)이 주어지면 다음 레이팅 cutoff를 출력한다. [2999 -> 3000] legendary Grandmaster import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; import java.util.TreeSet; public class Main { public static void main(String arg[]) throws IOException { BufferedReader br = ..
[April Fools Day Contest 2022] A. Who Tested? import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; import java.util.TreeSet; public class Main { public static void main(String arg[]) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); System.out.println("BucketPotato"); } }