Codeforces

Codeforces #1487B Cat Cycle

ppwag 2021. 3. 9. 00:35

문제

https://codeforces.com/problemset/problem/1487/B

걸린 시간

03 : 48 : 01

풀이

C++

#include <bits/stdc++.h>
#define INF 1e9
#define all(c) c.begin(), c.end()
typedef long long ll;
typedef unsigned long long ull;
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int tc;
    cin >> tc;
    while(tc--){
        int n, k;
        cin >> n >> k;
        if(n%2 == 0) cout << (k-1)%n+1 << "\n";
        else{
            int A = n-1;
            int B, remain;
            int piece = k/n;
            int cycle = n/2;
            if(k <= n){
                B = 0;
                remain = k;
            }
            else{
                if(k%n == 0){
                    B = (piece-1) % cycle * 2;
                    remain = n;
                }
                else{
                    B = piece % cycle * 2;
                    remain = k%n;
                }
            }
            int fi = (A-B)/2;
            int se = (n-1)/2;
            if(remain < 1+fi) B += 0;
            else if(remain < 1+fi+se) B += 1;
            else B += 2;
            cout << (B+remain-1)%n+1 << "\n";
        }
    }
    return 0;
}

solution 도 빠르게 떠올리지 못했고, 인덱스의 차이도 잘 계산해내지 못해 풀이에 시간이 매우 오래 걸렸던 문제이다.

풀이 작성도 중요하지만 같은 문제를 풀 때 똑같이 어려움을 겪지 않도록 신경 써야 할 점들을 대신 기록하려고 한다.

  1. 구현을 하기 전, 문제에서 사용되는 변수들을 시작 값(0, 1)에 따라 나눌 필요가 있다.
  2. 나머지 연산 % 은 결과가 0 부터 나눈 수 - 1 까지 임을 기억해야한다.
  3. 문제의 초기 상태를 잘 파악해야한다.

'Codeforces' 카테고리의 다른 글

Codeforces Round #706 (Div. 2) A  (0) 2021.03.11
Codeforces #1486B Eastern Exhibition  (0) 2021.03.10
Codeforces #1493B Planet Lapituletti  (0) 2021.03.07
Codeforces Round #705 (Div. 2) A  (0) 2021.03.07
Codeforces #1491B Minimal Cost  (0) 2021.03.06

댓글