문제

https://codeforces.com/problemset/problem/1485/A

걸린 시간

00 : 14 : 03

풀이

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 solve(){
    int a, b;
    cin >> a >> b;
    queue<pair<int, int>> q;
    map<pair<int, int>, int> visited;
    q.push(make_pair(a, b));
    visited[make_pair(a, b)] = 1;
    int op = 0;
    while(!q.empty()){
        int size = q.size();
        for(int i = 0; i < size; i++){
            a = q.front().first;
            b = q.front().second;
            q.pop();
            if(a == 0) return op;
            if(!visited[make_pair(a/b, b)]){
                q.push(make_pair(a/b, b));
                visited[make_pair(a/b, b)] = 1;
            }
            if(!visited[make_pair(a, b+1)]){
                q.push(make_pair(a, b+1));
                visited[make_pair(a, b+1)] = 1;
            }
        }
        op++;
    }
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int tc;
    cin >> tc;
    while(tc--){
        cout << solve() << "\n";
    }
    return 0;
}

양의 정수 a, b 가 주어진다. a 를 b 로 나누고 하한, b 의 값을 1 증가 두 가지 연산이 있는데 a 값이 0 이 되도록 하는 연산의 최소 수를 구해야 한다.

모든 경우의 수를 중복없이 시도하면서 연산의 최소값을 찾는 문제이므로 bfs 를 사용하면 해결할 수 있다.

'Codeforces' 카테고리의 다른 글

Codeforces #1494A ABC String  (0) 2021.03.04
Educational Codeforces Round 105 (Rated for Div. 2) A  (0) 2021.03.03
Codeforces #1491A K-th Largest Value  (0) 2021.03.02
Codeforces #1486A Shifting Stacks  (0) 2021.03.01
Codeforces #1487A Arena  (0) 2021.02.28

댓글