제출 #1338825

#제출 시각아이디문제언어결과실행 시간메모리
1338825edl0231Handcrafted Gift (IOI20_gift)C++20
100 / 100
125 ms19292 KiB
#include <bits/stdc++.h>
#include "gift.h"
//#include "grader.cpp"
using namespace std;

int construct(int n, int r, std::vector<int> a, std::vector<int> b, std::vector<int> x) {
    vector<pair<int, int>> v;
    for (int i = 0; i < r; i++)
    {
        if (x[i] == 1) {v.emplace_back(a[i], b[i]);}
    }
    sort(v.begin(), v.end());
    vector<pair<int, int>> intervals;
    int st = -1, curr = -1;
//    for (auto i : v) cout << i.first << ' ' << i.second;
    for (auto i : v)
    {
        if (st == -1) {st = i.first, curr = i.second; continue;}
        if (i.first > curr) {intervals.emplace_back(st, curr); st = i.first, curr = i.second; continue;}
        curr = max(i.second, curr);
    }
    if (st != -1) intervals.emplace_back(st, curr);
//    for (auto i : intervals) cout << i.first << ' ' << i.second << '\n';
    
    vector<int> w(n);
    int ind = 0, ct = 0;
    for (auto i : intervals)
    {
        while (ind < i.first) w[ind] = ct, ind++, ct++;
        for (int j = i.first; j <= i.second; j++) w[j] = ct;
        ind = i.second + 1, ct++;
    }
//    cout << ind << ' ';
    for (; ind < n; ind++) w[ind] = ct, ct++;
//    for (auto i : w) cout << i << ' ';
//    for (auto i : intervals) cout << i.first << ' ';
    for (int i = 0; i < r; i++)
    {
        if (x[i] == 1) continue;
        if (w[a[i]] == w[b[i]]) return 0;
    }
    string s = "";
    for (int i = 0; i < n; i++)
    {
        if (w[i] & 1) s += 'R';
        else s += 'B';
    }
    craft(s);
    return 1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...