본문 바로가기

전체 글

[코드포스 Round 677] E. Two Round Dances 음.. 뭔가.. 수학... 모르겠... 해서 패스했던 문제 그래서 풀이 들으면서 풀었다. 아ㅋㅋㅋㅋ 그리고 two round dance 저 round가 둥글게란 뜻이였다. 나는 두 개로 나누니깐 그 경기할 때 라운드 그런거 생각했었음. 1라운드에 춤 추는 사람 2라운드에 춤 추는 사람. Round dance is a dance circle consisting of 1 or more people 여기서 확실히 얘기해주는데 넘겼구나 암튼 풀이는 이렇다 (k-1)! * (k-1) ! * C(n, k) / 2 (k = n / 2) 일단 그룹에 속하는 사람 뽑는 경우가 n명 중 n / 2명 뽑는 거니깐 C(n, n/2)이고 두 그룹의 순서는 상관 없어서 / 2한다 다음으로 원으로 도는 순서 구해야 하는데 이건 원.. 더보기
[코드포스 Round 677] D. Districts Connection 이것도 보면 모두 같은 숫자만 아니면 어떻게든 정답이 만들어진다. 그래서 먼저 전부 같은 경우 제외해주고.. 이제 전부 연결되게 만들어주는게 문제인데.. 오.. 이거 잘 보니 유파로 풀 수 있겠다 싶었다. 집합 하나를 만드는게 목표니깐 집합이 다르고 숫자가 다른 경우에 묶어주는거지. 다음으로 문제가 생겼는데 숫자 범위가 10^9이다. ㅋㅋㅋㅋ 유파 만들면 범위 터져버린다. 근데 보면 n은 5000밖에 안 된다. 그래서 좌표압축 하면 어떨까 싶었음. 그래서 좌표압축하고 유파써서 풀었다. 죄표압축 기억 안 나서 코드 복붙했는데 양심이 조금 찔리는군 #include #include #include #include #include #include #include #include #include #include .. 더보기
[코드포스 Round 677] C. Dominant Piranha 조금 생각해보니 전부 같지 않다면 반드시 대장 피라냐가 생긴다! 대장 피라냐는 가장 큰 사이즈일테니 처음에 가장 큰 피라냐를 찾았다. 하지만 틀림ㅎㅎ 알고보니 554일 경우 옆에 작은 값이 있는 가장 큰 값을 찾아야 한다. 그래야 먹고 커지지. #include #include #include #include #include #include #include #include #include #include #include #include #include #define xx first #define yy second #define all(x) (x).begin(), (x).end() using namespace std; using i64 = long long int; using ii = pair; using .. 더보기
[코드포스 Round 677] B. Yet Another Bookshelf 최소 움직이는 횟수는 1과 1 사이에 0의 개수라서 1의 시작점 ~ 1의 끝 점 사이의 0의 개수를 세어줬다. #include #include #include #include #include #include #include #include #include #include #include #include #include #define xx first #define yy second #define all(x) (x).begin(), (x).end() using namespace std; using i64 = long long int; using ii = pair; using ii64 = pair; using iii = tuple; voidsolve() { int n; scanf("%d", &n); int s.. 더보기
[코드포스 Round 677] A. Boring Apartments intercoms : 인터폰 (구내전화) resident : 주민, 거주자 대회 중에 문제 이해 잘 안 됐는데 지금 다시 보니 알겠다. 11, 111 이런게 지루한 아파트 번호이고 얘가 이 번호로 계속 전화를 걸다가 누가 받으면 끊는다는구나. 문제 그대로 구현했다. 1부터 9까지 가는데 각 수마다 1, 11, 111, 1111 찍었다. 그리고 문자열 길이 더해나갔음 #include #include #include #include #include #include #include #include #include #include #include #include #include #define xx first #define yy second #define all(x) (x).begin(), (x).end() us.. 더보기
[코드포스 Round 677] 후기 첫 버츄얼! 이전에 북님이 만든 practice만 계속 풀다가 백준으로 넘어가서 백준 주구장창 풀고 다시 코포로 돌아왔다. 하지만 바로 풀기는 무서워서 버츄얼로 좀 돌다가 블루 찍으면 실전으로 갈 예정. 올해 블루 찍는게 목표여서 12월까지 계속 알고에 미친년처럼 풀 예정.. 일주일에 두 번 푸는게 목표다. 이번 결과는 1410 민트 이렇게 결과나오니 너무 재밌다ㅋㅋㅋ 의욕 불탐 활활.. 블루 조진다.. Standings ~ 00:13 A 솔브 역시나 영어.. 읽는데 시간 너무 오래 걸린다. 단순히 같은 수 구하는 문제라 문자열 더해가면서 풀었음. ~ 00:30 B 솔브 제일 처음 1이 나타나는 시점과 끝에 나타나는 시점 사이 0의 개수를 세면 되는 문제. 이것도 바로 아이디어 떠올랐다. ~ 00:45 .. 더보기
[토요라운드] C. 사탕 (1812) 어떻게 풀지 고민하다가 이걸 다 더해보니 1 + 2 + 3 + 4 + 5를 구할 수 있었다. 여기서 기존에 있는 걸 빼면 되겠다 생각했음. n = 5일 때 고려해보니 위의 저 노란색만 빼면 되겠다 싶었다. 저 노란 덩어리는 [(i + 1 + N) % N], [(i - 2 + N) % N] 라서 이 인덱스의 수만 뺐는데 예시가 틀렸다ㅋㅋ 예시는 n의 크기가 3인데 여기서 두 덩어리를 빼면 값이 이상하게 나온다. 보니깐 홀수 인덱스만 빼면 되겠다. #include #include #include #include #include #include #include #include #include #include #include #include #include #define xx first #define yy se.. 더보기
[토요라운드] B. 기념일 1 (10420) [미완] 윤년때문에 어떻게 할까 엄청 고민하다가 날짜를 전부 일 수로 저장하고 더하는 방식으로 구하려 했다. 다시 년 / 월로 나눌 때는 년도별 일 수를 저장하고 거기에 맞게 나누는 방식으로.. 그런데 틀렸다. 어디서 틀렸는지는 살펴봐야 할듯 이건 틀린 코드 #include #include #include #include #include #include #include #include #include #include #include #include #include #define xx first #define yy second #define all(x) (x).begin(), (x).end() using namespace std; using i64 = long long int; using ii = pair; usi.. 더보기