# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
367362 | 2021-02-16T23:55:58 Z | lookcook | Growing Vegetable is Fun 3 (JOI19_ho_t3) | C++17 | 500 ms | 58548 KB |
#include <bits/stdc++.h> #define int long long using namespace std; int dp[3][70][70][70][70]; // 0 = r, 1 = g, 2 = y int n; vector<int> r, g, y; string s; int rec(int pos, int rp, int gp, int yp, int lst) { if (pos == n) return 0; if (dp[lst][pos][rp][gp][yp] != -1) return dp[lst][pos][rp][gp][yp]; int res = 1e15; if (!r.empty() && r.size()!=rp && lst!=0) res = min(res, rec(pos+1, rp+1, gp, yp, 0) + abs(r[rp]-pos)); if (!g.empty() && g.size()!=gp && lst!=1) res = min(res, rec(pos+1, rp, gp+1, yp, 1) + abs(g[gp]-pos)); if (!y.empty() && y.size()!=yp && lst!=2) res = min(res, rec(pos+1, rp, gp, yp+1, 2) + abs(y[yp]-pos)); dp[lst][pos][rp][gp][yp] = res; return res; } int fast() { r = {}, g = {}, y = {}; for (int i = 0; i < 3; i++) for (int a = 0; a <= n; a++) for (int b = 0; b <= n; b++) for (int c = 0; c <= n; c++) for (int d = 0; d <= n; d++) dp[i][a][b][c][d] = -1; for (int i = 0; i < n; i++) { if (s[i] == 'R') r.push_back(i); if (s[i] == 'G') g.push_back(i); if (s[i] == 'Y') y.push_back(i); } int res = min(rec(0,0,0,0,1),rec(0,0,0,0,0)); if (res >= 1e15) return -1; else return res/2; } int slow() { queue<pair<string,int>> q; q.push({s,0}); set<string> vis; vis.insert(s); while (!q.empty()) { pair<string,int> p = q.front(); q.pop(); bool ok = true; for (int i = 1; i < s.length(); i++) { if (p.first[i] == p.first[i-1]) { ok = false; } } if (ok) return p.second; for (int i = 1; i < p.first.length(); i++) { string t = p.first; swap(t[i],t[i-1]); if (vis.count(t) == 0) { vis.insert(t); q.push({t,p.second+1}); } } } return -1; } char a[8]; void gen(int x) { if (x == n) { s = ""; for (int i = 0; i < n; i++) s += a[i]; int fa = fast(); int sl = slow(); if (fa != sl) { cout << "WA, fast=" << fa << " slow=" << sl << '\n'; cout << s << '\n'; } return; } a[x] = 'R'; gen(x+1); a[x] = 'G'; gen(x+1); a[x] = 'Y'; gen(x+1); } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> s; cout << fast() << '\n'; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 364 KB | Output is correct |
2 | Correct | 1 ms | 492 KB | Output is correct |
3 | Correct | 1 ms | 620 KB | Output is correct |
4 | Correct | 3 ms | 3948 KB | Output is correct |
5 | Correct | 6 ms | 10092 KB | Output is correct |
6 | Correct | 6 ms | 10240 KB | Output is correct |
7 | Correct | 6 ms | 10092 KB | Output is correct |
8 | Correct | 6 ms | 10092 KB | Output is correct |
9 | Correct | 6 ms | 10092 KB | Output is correct |
10 | Correct | 7 ms | 10092 KB | Output is correct |
11 | Incorrect | 6 ms | 10096 KB | Output isn't correct |
12 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 364 KB | Output is correct |
2 | Correct | 1 ms | 492 KB | Output is correct |
3 | Correct | 1 ms | 620 KB | Output is correct |
4 | Correct | 3 ms | 3948 KB | Output is correct |
5 | Correct | 6 ms | 10092 KB | Output is correct |
6 | Correct | 6 ms | 10240 KB | Output is correct |
7 | Correct | 6 ms | 10092 KB | Output is correct |
8 | Correct | 6 ms | 10092 KB | Output is correct |
9 | Correct | 6 ms | 10092 KB | Output is correct |
10 | Correct | 7 ms | 10092 KB | Output is correct |
11 | Incorrect | 6 ms | 10096 KB | Output isn't correct |
12 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 620 KB | Output is correct |
2 | Execution timed out | 1097 ms | 58548 KB | Time limit exceeded |
3 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 364 KB | Output is correct |
2 | Correct | 1 ms | 492 KB | Output is correct |
3 | Correct | 1 ms | 620 KB | Output is correct |
4 | Correct | 3 ms | 3948 KB | Output is correct |
5 | Correct | 6 ms | 10092 KB | Output is correct |
6 | Correct | 6 ms | 10240 KB | Output is correct |
7 | Correct | 6 ms | 10092 KB | Output is correct |
8 | Correct | 6 ms | 10092 KB | Output is correct |
9 | Correct | 6 ms | 10092 KB | Output is correct |
10 | Correct | 7 ms | 10092 KB | Output is correct |
11 | Incorrect | 6 ms | 10096 KB | Output isn't correct |
12 | Halted | 0 ms | 0 KB | - |