This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |