제출 #1019374

#제출 시각아이디문제언어결과실행 시간메모리
1019374ttamxLinear Garden (IOI08_linear_garden)C++17
61 / 100
192 ms14180 KiB
#include<bits/stdc++.h> using namespace std; const int N=1e6+5; int n,m; int dp[3][3][5],ndp[3][3][5]; string s; tuple<int,int,int> qr[N]; bool ok[N]; int& norm(int &x){ return x%=m; } int main(){ cin >> n >> m; cin >> s; int mn=0,mx=0,cur=0,ans=1; for(int i=0;i<n;i++){ if(s[i]=='P'){ qr[n-i-1]={cur+1,mn,mx}; ok[n-i-1]=true; } cur+=s[i]=='L'?1:-1; mn=min(mn,cur); mx=max(mx,cur); } dp[0][0][2]=1; for(int i=1;i<=n;i++){ for(int j=0;j<3;j++){ for(int k=0;k<3;k++){ for(int x=0;x<5;x++){ ndp[j][k][x]=0; } } } for(int j=0;j<3;j++){ for(int k=0;k<3;k++){ for(int x=-2;x<=2;x++){ if(x<2)norm(ndp[j][max(k,x+1)][x+3]+=dp[j][k][x+2]); if(x>-2)norm(ndp[max(j,-x+1)][k][x+1]+=dp[j][k][x+2]); } } } for(int j=0;j<3;j++){ for(int k=0;k<3;k++){ for(int x=0;x<5;x++){ dp[j][k][x]=ndp[j][k][x]; } } } if(!ok[i])continue; auto [val,mn,mx]=qr[i]; for(int j=0;j<3;j++){ for(int k=0;k<3;k++){ int mn2=min(mn,val-j); int mx2=max(mx,val+k); if(mx2-mn2<=2){ for(int x=0;x<5;x++){ norm(ans+=dp[j][k][x]); } } } } } cout << ans; }
#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...