티스토리 뷰

ps

BOJ 18138(리유나는 세일러복을 좋아해) 풀이

KWG07(joseph0528) 2021. 1. 8. 20:34

solved.ac 티어 : 플래티넘 5

www.acmicpc.net/problem/18138

 

18138번: 리유나는 세일러복을 좋아해

너비가 3인 티셔츠와 너비가 2인 세일러 카라를 붙이고, 너비가 5인 티셔츠에 너비가 5인 세일러 카라를 붙이고 너비가 7인 티셔츠에 너비가 4인 세일러 카라를 붙이고 너비가 10인 티셔츠에 너비

www.acmicpc.net

 

이문제는 아주 쉬운 이분 매칭이라 입력을 받고 너비가 w/2 이상 w*3/4 이하랑 너비가 w 이상 w*5/4인 경우 해당 위치에 값을 넣어주고 이분 매칭 하면 끝난다.

(이 문제 못 풀면 이분 매칭 다시 배워야 된다.)

 

#include <bits/stdc++.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
typedef long long ll;
ll inf=1e9;
vector<ll> l[1001];
ll t[1001],q[1001],ty[1001];
ll n,m;
bool dfs(ll x){
    for(int i=0;i<l[x].size();i++){
        ll y=l[x][i];
        if(t[y]){continue;}
        t[y]=true;
        if(q[y]==0||dfs(q[y])){
            q[y]=x;
            return true;
        }
    }
    return false;
}
int main()
{
    ll c,d,cnt=0;
    scanf("%lld %lld",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%lld",&ty[i]);
    }
    for(int i=1;i<=m;i++){
        scanf("%lld",&c);
        for(int g=1;g<=n;g++){
            if(((double)ty[g]/2<=c && ty[g]*3/4>=c)||(ty[g]<=c && ty[g]*5/4>=c)){
                //printf("%lld %lld\n",g,i);
                l[g].push_back(i);
            }
        }
    }
    for(int i=1;i<=n;i++){
        fill(t,t+1001,false);
        if(dfs(i)){cnt++;}
    }
    printf("%lld\n",cnt);
 
}

딱히 주석도 필요 없을 정도로 쉽다.

'ps' 카테고리의 다른 글

BOJ 17299(오등큰수)풀이  (0) 2021.01.10
BOJ 18282(해킹) 풀이  (0) 2021.01.10
BOJ 19851(버거운 버거)풀이  (0) 2021.01.07
BOJ 1017(소수 쌍) 풀이  (0) 2021.01.06
Codeforces Round #693 (Div. 3) 풀이  (2) 2021.01.06
댓글