Submission #1105497

#TimeUsernameProblemLanguageResultExecution timeMemory
1105497NekoNPCLinear Garden (IOI08_linear_garden)C++17
0 / 100
63 ms65536 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long lli;
const int maxN = 1e6 + 12;
int n; string s;
lli mod, __f[maxN][2][2][3];
 
lli f(int i, bool flag, int d, int cnt) {
    if (cnt == 3) {
        return 0;
    }
    if (i == n) {
        return 1;
    }
    lli& dp = __f[i][flag][d][cnt];
    if (dp != -1) {
        return dp;
    }
    dp = 0;
    for (int k = 0; k <= (flag ? 1 : s[i] - '0'); ++k) {
        dp += f(i + 1, flag | (k < s[i] - '0'), d, d == k ? cnt + 1 : 1);
        dp %= mod;
    }
    return dp;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n >> mod >> s;
    memset(__f, -1, sizeof(__f));
    for (int i = 0; i < (int) s.length(); ++i) {
        if (s[i] == 'L') {
            s[i] = '0';
        } else {
            s[i] = '1';
        }
    }
    reverse(s.begin(), s.end());
    cout << (f(0, 0, 0, 0) + mod - 1) % mod << "\n";
}
#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...