Task: | Split in Three |
Sender: | socho |
Submission time: | 2021-01-30 16:54:44 +0200 |
Language: | C++ (C++17) |
Status: | READY |
Result: | 100 |
group | verdict | score |
---|---|---|
#1 | ACCEPTED | 22 |
#2 | ACCEPTED | 78 |
test | verdict | time | group | |
---|---|---|---|---|
#1 | ACCEPTED | 0.02 s | 1, 2 | details |
#2 | ACCEPTED | 0.01 s | 1, 2 | details |
#3 | ACCEPTED | 0.01 s | 1, 2 | details |
#4 | ACCEPTED | 0.02 s | 1, 2 | details |
#5 | ACCEPTED | 0.01 s | 1, 2 | details |
#6 | ACCEPTED | 0.01 s | 1, 2 | details |
#7 | ACCEPTED | 0.01 s | 1, 2 | details |
#8 | ACCEPTED | 0.01 s | 1, 2 | details |
#9 | ACCEPTED | 0.02 s | 2 | details |
#10 | ACCEPTED | 0.02 s | 2 | details |
#11 | ACCEPTED | 0.02 s | 2 | details |
#12 | ACCEPTED | 0.02 s | 2 | details |
#13 | ACCEPTED | 0.02 s | 2 | details |
#14 | ACCEPTED | 0.02 s | 2 | details |
#15 | ACCEPTED | 0.01 s | 2 | details |
Compiler report
input/code.cpp: In function 'bool solve(long long int, long long int)': input/code.cpp:43:24: warning: suggest parentheses around assignment used as truth value [-Wparentheses] return dp[ind][asum] = solve(ind+1, asum); ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~ input/code.cpp:55:24: warning: suggest parentheses around assignment used as truth value [-Wparentheses] return dp[ind][asum] = ans; ~~~~~~~~~~~~~~^~~~~ input/code.cpp: In function 'void usaco()': input/code.cpp:15:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result] freopen("problem.in", "r", stdin); ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~ input/code.cpp:16:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result] freopen("problem.out", "w", stdout); ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
Code
#include <bits/stdc++.h>using namespace std;void fast() {ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);}void ran() {srand(chrono::steady_clock::now().time_since_epoch().count());}long long get_rand() {long long a = rand();long long b = rand();return a * (RAND_MAX + 1ll) + b;}void usaco() {freopen("problem.in", "r", stdin);freopen("problem.out", "w", stdout);}template<typename T>using min_pq = priority_queue<T, vector<T>, greater<T>>;// #define endl '\n'// #define double long double#define int long long// const int MOD = 1000 * 1000 * 1000 + 7;// const int MOD = 998244353;const int MXN = 105, MXS = 10005;int n;int par[MXN][MXS]; // 0 for no change asum, 1 for change in asumint assign[MXN];int dp[MXN][MXS];int s;bool solve(int ind, int asum) {if (ind == n + 1) {if (asum == s/3 - 1) {return true;}return false;}if (dp[ind][asum] != -1) return dp[ind][asum];if (assign[ind] != -1) {par[ind][asum] = 0;return dp[ind][asum] = solve(ind+1, asum);}else {bool ans = false;if (solve(ind+1, asum+ind)) {ans = true;par[ind][asum] = 1;}if (solve(ind+1, asum)) {ans = true;par[ind][asum] = 0;}return dp[ind][asum] = ans;}}signed main() {for (int i=0; i<MXN; i++) {for (int j=0; j<MXS; j++) {dp[i][j] = -1;par[i][j] = -1;}}ran(); fast();cin >> n;s = n * (n+1) / 2;if (s % 3 == 0) {memset(assign, -1, sizeof assign);int L = s / 3;for (int i=n; i>=1; i--) {if (L >= i) {L -= i;assign[i] = 2;}}solve(1, 0);int as = 0;for (int curr=1; curr<=n; curr++) {if (assign[curr] == 2) {//}else {if (par[curr][as] == 1) {as += curr;assign[curr] = 1;}else {assign[curr] = 3;}}}for (int i=1; i<=n; i++) {cout << assign[i] << ' ';}cout << endl;}else {cout << "IMPOSSIBLE" << endl;}}
Test details
Test 1
Group: 1, 2
Verdict: ACCEPTED
input |
---|
3 |
correct output |
---|
1 2 3 |
user output |
---|
1 2 3 |
Test 2
Group: 1, 2
Verdict: ACCEPTED
input |
---|
4 |
correct output |
---|
IMPOSSIBLE |
user output |
---|
IMPOSSIBLE |
Test 3
Group: 1, 2
Verdict: ACCEPTED
input |
---|
5 |
correct output |
---|
1 3 1 3 2 |
user output |
---|
3 3 3 1 2 |
Test 4
Group: 1, 2
Verdict: ACCEPTED
input |
---|
6 |
correct output |
---|
1 3 2 2 1 3 |
user output |
---|
2 1 3 1 3 2 |
Test 5
Group: 1, 2
Verdict: ACCEPTED
input |
---|
7 |
correct output |
---|
IMPOSSIBLE |
user output |
---|
IMPOSSIBLE |
Test 6
Group: 1, 2
Verdict: ACCEPTED
input |
---|
8 |
correct output |
---|
2 3 1 2 3 3 2 1 |
user output |
---|
3 3 3 2 1 1 3 2 |
Test 7
Group: 1, 2
Verdict: ACCEPTED
input |
---|
9 |
correct output |
---|
1 2 3 1 2 3 3 2 1 |
user output |
---|
3 3 1 1 3 2 1 3 2 |
Test 8
Group: 1, 2
Verdict: ACCEPTED
input |
---|
10 |
correct output |
---|
IMPOSSIBLE |
user output |
---|
IMPOSSIBLE |
Test 9
Group: 2
Verdict: ACCEPTED
input |
---|
42 |
correct output |
---|
1 3 2 2 1 3 1 2 3 3 2 1 1 2 3 ... |
user output |
---|
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ... |
Test 10
Group: 2
Verdict: ACCEPTED
input |
---|
95 |
correct output |
---|
1 3 1 3 2 1 2 3 3 2 1 1 2 3 3 ... |
user output |
---|
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ... Truncated |
Test 11
Group: 2
Verdict: ACCEPTED
input |
---|
96 |
correct output |
---|
1 3 2 2 1 3 1 2 3 3 2 1 1 2 3 ... |
user output |
---|
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ... Truncated |
Test 12
Group: 2
Verdict: ACCEPTED
input |
---|
97 |
correct output |
---|
IMPOSSIBLE |
user output |
---|
IMPOSSIBLE |
Test 13
Group: 2
Verdict: ACCEPTED
input |
---|
98 |
correct output |
---|
2 3 1 2 3 3 2 1 1 2 3 3 2 1 1 ... |
user output |
---|
3 3 3 3 3 2 3 3 3 3 3 3 3 3 3 ... Truncated |
Test 14
Group: 2
Verdict: ACCEPTED
input |
---|
99 |
correct output |
---|
1 2 3 1 2 3 3 2 1 1 2 3 3 2 1 ... |
user output |
---|
3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ... Truncated |
Test 15
Group: 2
Verdict: ACCEPTED
input |
---|
100 |
correct output |
---|
IMPOSSIBLE |
user output |
---|
IMPOSSIBLE |