Submission #819789

#TimeUsernameProblemLanguageResultExecution timeMemory
819789canadavid1Linear Garden (IOI08_linear_garden)C++14
100 / 100
121 ms45312 KiB
#include <bits/stdc++.h> using namespace std; #define all(x) begin(x),end(x) vector<array<int,9>> dp; // 5*diff + min + 2 vector<array<bool,9>> s; int N,M; int num_combinations(int off,int mins, int maxs) { if(maxs > 2 || mins < -2) return 0; if(off >= N) return 1; mins = min(mins,0); maxs = max(maxs,0); if(s[off][maxs-3*mins]) return dp[off][maxs-3*mins]; // try L int comb = 0; comb += num_combinations(off+1,mins-1,maxs-1); comb += num_combinations(off+1,mins+1,maxs+1); comb %= M; dp[off][maxs-3*mins] = comb; s[off][maxs-3*mins] = true; return comb; } signed main() { cin >> N >> M; dp.assign(N,array<int,9>{}); s.assign(N,array<bool,9>{}); int off = 1; int mins = 0; int maxs = 0; for(int i = dp.size()-1; i >= 0; i--) { for(int mins = -2; mins <= 0; mins++) { for(int maxs = 0; maxs < 3; maxs++) { int64_t comb = 0; comb += num_combinations(i+1,mins-1,maxs-1); comb += num_combinations(i+1,mins+1,maxs+1); if(comb >= M) comb -= M; dp[i][maxs-3*mins] = comb; s[i][maxs-3*mins] = true; } } } for(int i = 0; i < N; i++) { char c; cin >> c; if(c=='P') off += num_combinations(i+1,mins-1,maxs-1); if(c=='P') {mins++;maxs++;} else {mins--;maxs--;} mins = min(mins,0); maxs = max(maxs,0); if(off>=M) off -= M; } cout << off << "\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...