# Link

https://www.acmicpc.net/problem/10040

 

10040번: 투표

입출력 예시에서 경기는 4개, 위원은 3명이 있다. 각 경기를 개최하는데 필요한 비용은 5, 3, 1, 4이다. 위원 1의 심사 기준은 4이다. 비용이 4 이하인 경기 중에서 가장 재미있는 경기는 2이다. 위원

www.acmicpc.net

 

 

# Code - C++

//
//  BOJ
//  ver.C++
//
//  Created by GGlifer
//
//  Open Source

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

#define endl '\n'
#define len(x) (int)(x).length()
#define size(x) (int)(x).size()
struct Game { int a, f, no; };

// Set up : Global Variables
/* None */

// Set up : Functions Declaration
bool operator < (const Game &u, const Game &v);


int main()
{
    // Set up : I/O
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    // Set up : Input
    int N, M;
    cin >> N >> M;
    int A[N], B[M];
    for (int i=0; i<N; i++)
        cin >> A[i];
    for (int i=0; i<M; i++)
        cin >> B[i];

    // Process
    Game G[N];
    for (int i=0; i<N; i++) {
        G[i] = {A[i], N-i, i+1};
    }

    sort(G, G+N);

    for (int i=1; i<N; i++) {
        if (G[i].f < G[i-1].f) {
            G[i].f = G[i-1].f;
            G[i].no = G[i-1].no;
        }
    }

    int C[N+1];
    memset(C, 0, sizeof(C));
    for (int i=0; i<M; i++) {
        int b = B[i];
        auto pos = upper_bound(G, G+N, Game{b, -1, -1});
        if (pos == G) continue;
        auto [a, f, no] = *(--pos);
        C[no]++;
    }

    int ans = distance(C, max_element(C, C+(N+1)));

    // Control : Output
    cout << ans << endl;
}

// Helper Functions
bool operator < (const Game &u, const Game &v)
{
    return u.a < v.a;
}

 

 

지적, 조언, 첨언 모두 환영합니다!!!

+ Recent posts