A. Red and Blue Beans

C++

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

int main(){
    fastio;
    int tc;
    cin >> tc;
    while(tc--){
        int r, b, d;
        cin >> r >> b >> d;
        int mi = min(r, b);
        int ma = max(r, b);
        if(ceil(ma*1.0/(1+d)) <= mi) cout << "YES\n";
        else cout << "NO\n";
    }
    return 0;
}

red, blue 중 작은 값을 하나씩 쪼개어 큰 값에서 1+d (가능한 최대 차이) 씩 줄여나갈 때 값이 남지 않으면 YES 를 남으면 NO 를 출력하면 된다. 큰 값을 1+d 로 나눈 몫을 작은 값과 비교하면 분배할 수 있는지를 판단할 수 있다.

B. The Cake Is a Lie

C++

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

int main(){
    fastio;
    vector<vector<int>> g(100, vector<int>(100, 0));
    for(int y = 0; y < 100; y++) g[y][0] = y;
    for(int y = 0; y < 100; y++){
        for(int x = 1; x < 100; x++){
            g[y][x] = g[y][x-1] + y+1;
        }
    }
    int tc;
    cin >> tc;
    while(tc--){
        int n, m, k;
        cin >> n >> m >> k;
        cout << (g[n-1][m-1] == k ? "YES" : "NO") << "\n";
    }
    return 0;
}

항상 오른쪽, 아래 로만 이동할 수 있으므로 모든 좌표에서의 burles 값은 어떤 경로이든 최소값으로 같다. 100 by 100 grid 의 값을 미리 계산해두고 입력받은 n, m 좌표의 값을 k 와 같은지 비교해주면 된다.


C. Berland Regional (Upsolving)

C++


후기

A, B 번이 너무 쉬워서 C 번을 풀었어야 했는데 TLE 를 받고 마무리 했다...

댓글