Problem

11/11

백설공주와 N난쟁이들

Problem

<사업부> "글쎄, 그놈이 아니라 일종의 처벌!", – 백설공주는 다시 한 번 난장이들을 재우려고 생각했습니다. 당신은 하나를 내려 놓을 것입니다 – 다른 하나는 이미 깨어 있습니다! 그래서 밤새.
<사업부>  
<사업부> 백설공주에게는 n명의 난쟁이가 있고 그들은 모두 매우 다릅니다. 그녀는 i번째 난장이를 재우는 데 ai분이 걸리고 그 후 그는 정확히 2분 동안 잠을 잔다는 것을 알고 있습니다. 백설공주가 모든 드워프가 잠들었을 때 최소 1분 이상 휴식을 취할 수 있는지, 그렇다면 어떤 순서로 드워프를 재울 수 있는지 알아내도록 도와주세요.
<사업부>  
<사업부> 예를 들어 a1 = 1, b1 = 10, a2 = 10, b2 = 20의 두 개의 노움만 있다고 가정해 보겠습니다. 백설공주가 첫 번째 노움을 먼저 재우기 시작하면 두 번째 노움을 눕히는 데 10분이 걸립니다. 한 사람은 잠자리에 들고 이 시간 동안 첫 번째 사람이 깨어납니다. 그녀가 두 번째 난쟁이로 시작하면 첫 번째 난쟁이를 재우고 10분 동안 휴식을 취할 시간이 있습니다.
<사업부>  
<사업부> 입력 데이터
<사업부> 입력 파일의 첫 번째 줄에는 숫자 n(1 <= n <= 10000)이 포함되고 두 번째 줄에는 숫자 a1,a2,… 세 번째 – 숫자 b1,b2,… bn (1 <= ai, bi <= 100000).
<사업부>  
<사업부> 출력
<사업부> 출력 파일 n 번호로 인쇄 – 격언을 침대에 놓는 순서. 백설공주가 쉬지 못하면 숫자 -1을 출력하세요.

<몸> (c) Grigoriev E., 2018
엔터 출력
<사업부> 2 <사업부> 1 10 <사업부> 10 20 2 1
Write the program below
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
const int N = 1e5 + 5;

struct dwarf {
    int a, b, i;
    dwarf() {}
    dwarf(int _a, int _i) {
        this->a = _a;
        this->i = _i;
    }
};

int n;
int k;
int c;
vector<dwarf>dwarfs(N);

bool cmp(dwarf a, dwarf b) {   
}

int main() {
    cin >> n;
    for (int i = 0; i < n; i++) {
        int x;
        cin >> x;
        k += x;
        dwarfs.at(i) = dwarf(x, i + 1);
    }

    for (int i = 0; i < n; i++) {
        cin >> dwarfs.at(i).b;
        if (dwarfs.at(i).b - (k - dwarfs.at(i).a) <= 0)
            c++;
    }

    if (c == n) {
        cout << -1;
        return 0;
    }

    sort(dwarfs.begin(), dwarfs.end(), cmp);

    for (int i = 0; i < n; i++)
        cout << dwarfs.at(i).i << " ";

    return 0;
}   

     

Program check result

To check the solution of the problem, you need to register or log in!