Submission #410400

#TimeUsernameProblemLanguageResultExecution timeMemory
410400JasiekstrzLinear Garden (IOI08_linear_garden)C++17
100 / 100
77 ms37596 KiB
#include<bits/stdc++.h> #define fi first #define se second using namespace std; const int N=1e6; int mod; int dp[N+10][3][3]; int ask(int n,int l,int r) { if(r+l>2) return 0; if(r+l==2) return dp[n][l][r]; // l=0, r=1 return (dp[n][0][2]+dp[n][1][1]-dp[n][0][1])%mod; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n; cin>>n>>mod; for(int j=0;j<=2;j++) { for(int k=0;k<=2;k++) dp[0][j][k]=1; } for(int i=0;i<n;i++) { for(int j=0;j<=2;j++) { for(int k=0;k<=2;k++) { if(j-1>=0 && k+1<=2) { dp[i+1][j-1][k+1]+=dp[i][j][k]; dp[i+1][j-1][k+1]%=mod; } if(k-1>=0 && j+1<=2) { dp[i+1][j+1][k-1]+=dp[i][j][k]; dp[i+1][j+1][k-1]%=mod; } } } } string s; cin>>s; int ans=1; int sum=0; int l=0,r=0; for(int i=1;i<=n;i++) { int x=(s[i-1]=='L' ? -1:1); if(x==1) { int tmps=sum-1,tmpl=max(l,-tmps),tmpr=max(r,tmps); ans+=ask(n-i,tmpl+tmps,tmpr-tmps); ans%=mod; } sum+=x; l=max(l,-sum); r=max(r,sum); } cout<<(ans%mod+mod)%mod<<"\n"; return 0; }
#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...