Submission #1036572

#TimeUsernameProblemLanguageResultExecution timeMemory
1036572VMaksimoski008Linear Garden (IOI08_linear_garden)C++17
50 / 100
26 ms13600 KiB
#include <bits/stdc++.h> #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() //#define int long long using namespace std; using ll = long long; using pii = pair<int, int>; using pll = pair<ll, ll>; const int LOG = 20; const int maxn = 1e5 + 5; ll n, mod, ans = 0; vector<ll> vec; string s; //neka L = -1 i P = 1 //togas abs(pref[i] - pref[j-1]) <= 2 za site i, j //ako celo vreme cuvame min pref suma i max pref suma, treba abs(max - min) <= 2 //drugite 2 dimenzii se under i started ll dp[1005][5][5][5][2]; ll f(int pos, int mn, int mx, int curr, int under) { if(mx - mn > 2) return 0; if(mx > 4 || mn < 0) return 0; if(pos == n + 1) return under; // cerr << pos << " " << mn << " " << mx << " " << curr << " " << under << '\n'; if(dp[pos][mn][mx][curr][under] != -1) return dp[pos][mn][mx][curr][under]; ll ans = 0; //try putting -1 for(int i=-1; i<=1; i++) { if(i == 0) continue; if(!under && i > vec[pos]) continue; int nmn = min(mn, curr + i); int nmx = max(mx, curr + i); int nu = under | (i < vec[pos]); ans = (ans + f(pos+1, nmn, nmx, curr + i, nu)) % mod; } return dp[pos][mn][mx][curr][under] = ans; } signed main() { memset(dp, -1, sizeof(dp)); cin >> n >> mod >> s; vec.push_back(0); if(n <= 10) { vector<string> vec; for(int s=0; s<(1<<n); s++) { string t = ""; for(int i=0; i<n; i++) { if(s & (1 << i)) t += '1'; else t += '0'; } bool ok = 1; for(int i=0; i<n&&ok; i++) { int cnt = 0; for(int j=i; j<n&&ok; j++) { if(t[j] == '1') cnt++; else cnt--; if(cnt > 2 || cnt < -2) ok = 0; } } if(ok) vec.push_back(t); } sort(vec.begin(), vec.end()); for(int i=0; i<vec.size(); i++) { if(vec[i] == s) { cout << (i + 1) % mod << '\n'; return 0; } } } for(int i=0; i<n; i++) { if(s[i] == 'L') vec.push_back(-1); else vec.push_back(1); } ll ans = f(1, 2, 2, 2, 0); cout << (ans + 1) % mod << '\n'; return 0; }

Compilation message (stderr)

linear_garden.cpp: In function 'int main()':
linear_garden.cpp:79:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::__cxx11::basic_string<char> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   79 |         for(int i=0; i<vec.size(); 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...