Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // CONTEST SOURCE
- #include <iostream>
- #include <cstdlib>
- #include <cstring>
- #include <cstdio>
- #include <vector>
- #include <cmath>
- #include <algorithm>
- #include <map>
- #include <queue>
- #include <set>
- #include <climits>
- //#include <priority_queue>
- using namespace std;
- #define ll long long
- #define x first
- #define y second
- #define pii pair<int, int>
- #define pdd pair<double, double>
- #define L(s) (int)(s).size()
- #define VI vector<int>
- #define all(s) (s).begin(), (s).end()
- #define pb push_back
- #define mp make_pair
- #define inf 1000000000
- int t, n, p, q, r, pq, qr, rp;
- int e[6][6];
- char path[1111];
- int ptr;
- void dfs(int v) {
- for(int j = 0; j < 6; ++j) {
- while(e[v][j]) {
- --e[v][j];
- dfs(j);
- }
- }
- if (v == 0) path[ptr++] = 'R'; else
- if (v == 1) path[ptr++] = 'Y'; else
- if (v == 2) path[ptr++] = 'B'; else
- if (v == 3) path[ptr++] = 'G'; else
- if (v == 4) path[ptr++] = 'V'; else
- if (v == 5) path[ptr++] = 'O';
- }
- bool solve() {
- if (p < qr || q < rp || r < pq) return 0;
- for(int p2q = 0; p2q <= p - qr && p2q <= q - rp; ++p2q) {
- e[0][3] = qr;
- e[3][0] = qr;
- e[1][4] = rp;
- e[4][1] = rp;
- e[2][5] = pq;
- e[5][2] = pq;
- e[0][1] = p2q;
- e[0][2] = p - e[0][3] - e[0][1];
- e[2][1] = q - e[0][1] - e[4][1];
- e[2][0] = r - e[2][5] - e[2][1];
- e[1][2] = r - e[0][2] - e[5][2];
- e[1][0] = p - e[3][0] - e[2][0];
- if (e[0][2] < 0 || e[2][1] < 0 || e[2][0] < 0 || e[1][2] < 0 || e[1][0] < 0) continue;
- if (e[0][1] + e[0][2] + e[0][3] != p) continue;
- if (e[1][0] + e[2][0] + e[3][0] != p) continue;
- if (e[1][0] + e[1][2] + e[1][4] != q) continue;
- if (e[0][1] + e[2][1] + e[4][1] != q) continue;
- if (e[2][0] + e[2][1] + e[2][5] != r) continue;
- if (e[0][2] + e[1][2] + e[5][2] != r) continue;
- int idx = 0; while(e[idx][0] + e[idx][1] + e[idx][2] == 0) ++idx;
- ptr = 0;
- dfs(idx);
- if (ptr != n + 1) continue;
- path[n] = 0;
- return 1;
- }
- return 0;
- }
- int main() {
- freopen("B-small-attempt0.in", "r", stdin);
- freopen("output.txt", "w", stdout);
- cin >> t;
- for(int tc = 1; tc <= t; ++tc) {
- cerr << tc << endl;
- cin >> n;
- cin >> p >> pq >> q >> qr >> r >> rp;
- cout << "Case #" << tc << ": ";
- if (!solve()) cout << "IMPOSSIBLE\n";
- else cout << path << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement