Submission #367361

#TimeUsernameProblemLanguageResultExecution timeMemory
367361lookcookGrowing Vegetable is Fun 3 (JOI19_ho_t3)C++17
5 / 100
1101 ms104868 KiB
#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.size()!=rp && lst!=0) res = min(res, rec(pos+1, rp+1, gp, yp, 0) + abs(r[rp]-pos)); if (g.size()!=gp && lst!=1) res = min(res, rec(pos+1, rp, gp+1, yp, 1) + abs(g[gp]-pos)); if (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 < 70; a++) for (int b = 0; b < 70; b++) for (int c = 0; c < 70; c++) for (int d = 0; d < 70; 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); } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> s; cout << slow() << '\n'; }

Compilation message (stderr)

joi2019_ho_t3.cpp: In function 'long long int rec(long long int, long long int, long long int, long long int, long long int)':
joi2019_ho_t3.cpp:16:17: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   16 |     if (r.size()!=rp && lst!=0) res = min(res, rec(pos+1, rp+1, gp, yp, 0) + abs(r[rp]-pos));
      |         ~~~~~~~~^~~~
joi2019_ho_t3.cpp:17:17: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   17 |     if (g.size()!=gp && lst!=1) res = min(res, rec(pos+1, rp, gp+1, yp, 1) + abs(g[gp]-pos));
      |         ~~~~~~~~^~~~
joi2019_ho_t3.cpp:18:17: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   18 |     if (y.size()!=yp && lst!=2) res = min(res, rec(pos+1, rp, gp, yp+1, 2) + abs(y[yp]-pos));
      |         ~~~~~~~~^~~~
joi2019_ho_t3.cpp: In function 'long long int slow()':
joi2019_ho_t3.cpp:50:27: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |         for (int i = 1; i < s.length(); i++) {
      |                         ~~^~~~~~~~~~~~
joi2019_ho_t3.cpp:56:27: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |         for (int i = 1; i < p.first.length(); i++) {
      |                         ~~^~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...