Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- #include <algorithm>
- #include <cmath>
- #include <set>
- #include <numeric>
- #define ll long long
- using namespace std;
- template <typename T>
- vector<size_t> sort_indexes(const vector<T> &v) {
- vector<size_t> idx(v.size());
- iota(idx.begin(), idx.end(), 0);
- stable_sort(idx.begin(), idx.end(),
- [&v](size_t i1, size_t i2) {return v[i1].second < v[i2].second;});
- return idx;
- }
- int main()
- {
- ios_base::sync_with_stdio(false);
- ll t;
- cin >> t;
- for (int num = 0; num < t; ++num) {
- ll n, s, e;
- cin >> n;
- vector<pair<int, int>> events(n);
- vector<int> check(n, 0);
- string res;
- for (int i = 0; i < n; ++i) {
- cin >> s >> e;
- events[i] = make_pair(s, e);
- }
- auto idx = sort_indexes(events);
- std::sort(events.begin(), events.end(), [](auto &left, auto &right) {
- return left.second < right.second;
- });
- ll cur_c = -1, cur_j = -1;
- for (int i = 0; i < events.size(); ++i) {
- if (events[i].first >= cur_c) {
- check[i] = 1;
- cur_c = events[i].second;
- } else if (events[i].first >= cur_j) {
- check[i] = 2;
- cur_j = events[i].second;
- }
- }
- cout << "Case #" << num + 1<< ": ";
- if (count(check.begin(), check.end(), 0) > 0) {
- cout << "IMPOSSIBLE";
- } else {
- res.resize(n);
- for (int i = 0; i < n; ++i) {
- if (check[i] == 1)
- res[idx[i]] = 'J';
- else if (check[i] == 2)
- res[idx[i]] = 'C';
- }
- cout << res;
- }
- cout << "\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement