티스토리 뷰

 

D - A Piece of Cake

AtCoder is a programming contest site for anyone from beginners to experts. We hold weekly programming contests online.

atcoder.jp

당시에는 풀지 못했지만 좀 간단하게 생각해보면 어렵지 않은 문제이다.

딸기의 위치가 2차원 격자로 주어지고, 이 2차원 격자를 A개의 row, B개의 column으로 자르려고 한다. 그러면 (A+1) * (B+1)개의 공간이 생기게 되는데, 여기서 발생한 공간 중 딸기가 존재하는 최소 영역과 최대 영역을 구하면 되는 문제이다.

좌표의 크기가 매우 크기 때문에 좌표 압축이 필요하다는 것을 알 수 있고, 이 좌표 압축 기법을 활용하면 별도의 알고리즘 없이 문제를 해결할 수 있다. 

각 딸기가 위치한 [x, y] 좌표를 압축하고, 이 [x, y] 좌표를 map에 넣어서 count를 하면 된다. 그리고 이 [x, y]는 A, B를 기준으로 상대적인 위치만 계산하면 되기 때문에 정답을 보장할 수 있게 된다.

 

#include<iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <map>
#define NUM 200010
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;

vector<ll> A, B;
ll C[NUM], R[NUM];
int w, h, n, a, b;
map<pll, ll> mp;

int main()
{
    memset(C, 0, sizeof(C));
    memset(R, 0, sizeof(R));
    
    cin >> w >> h;
    cin >> n;
    for (int i=1; i<=n; i++) {
        cin >> C[i] >> R[i];
    }
    
    
    cin >> a;
    for (int i=1; i<=a; i++) {
        ll x;
        cin >> x;
        A.push_back(x);
    }
    cin >> b;
    for (int i=1; i<=b; i++) {
        ll x;
        cin >> x;
        B.push_back(x);
    }
    A.push_back(w);
    B.push_back(h);
    
    sort(A.begin(), A.end());
    sort(B.begin(), B.end());
        
    for (int i=1; i<=n; i++) {
        ll x = lower_bound(A.begin(), A.end(), C[i]) - A.begin();
        ll y = lower_bound(B.begin(), B.end(), R[i]) - B.begin();
        mp[{x, y}]++;
    }
    
    ll m = n, M = 0;
    for (auto p : mp) {
        M = max(M, p.second);
    }
    
    if (mp.size() == (a+1) * (b+1)) {
        for (auto p : mp) m = min(m, p.second);
    } else m = 0;
    
    cout << m << " " << M << '\n';
}

'PS > AtCoder' 카테고리의 다른 글

[Atcoder] ABC305 :: E - Art Gallery on Graph  (2) 2023.06.12
[AtCoder] ABC305  (2) 2023.06.10
[AtCoder] ABC304  (4) 2023.06.03
[Atcoder] ABC302 :: C - Almost Equal  (0) 2023.06.02
[Atcoder] ABC303 :: E - A Gift From the Stars  (2) 2023.06.01
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함