제출 #1284949

#제출 시각아이디문제언어결과실행 시간메모리
1284949tripleabatteryLinear Garden (IOI08_linear_garden)C++20
100 / 100
237 ms9368 KiB
#include <bits/stdc++.h> #define fi first #define se second using namespace std; using namespace chrono; typedef long long ll; typedef pair<ll,ll> pii; ll exp(ll b, ll e, ll m) { if(!e)return 1; ll mew=exp(b,e/2,m)%m; if(e%2)return (((mew*mew)%m)*b)%m; else return (mew*mew)%m; } int main() { ios_base::sync_with_stdio(0);cin.tie(0); ll n,m; cin>>n>>m; string s; cin>>s; vector<ll> dp(n+1); dp[0]=1; for(ll i=1;i<=n;i++) { dp[i]=(exp(2,((i-1)/2),m))+dp[i-1]; } ll ans=1; pii mew={2ll,2}; for(ll i=1;i<=n;i++) { ll k=n-i; if(s[i-1]=='P') { pii riz={mew.fi-1,min(2ll,mew.se+1)}; if(riz==pii{1,2}||riz==pii{2,1})ans=(ans+dp[k])%m; if(riz==pii{0,2}||riz==pii{2,0})ans=(ans+exp(2,((k)/2),m))%m; if(riz==pii{1,1}||riz==pii{1,1})ans=(ans+exp(2,((k+1)/2),m))%m; if(riz==pii{1,0}||riz==pii{0,1})ans=(ans+1)%m; mew={min(2ll,mew.fi+1),mew.se-1}; } else mew={mew.fi-1,min(2ll,mew.se+1)}; } cout<<(ans%m)<<"\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...