Submission #428419

#TimeUsernameProblemLanguageResultExecution timeMemory
428419jamielimLinear Garden (IOI08_linear_garden)C++14
100 / 100
26 ms10040 KiB
#include <bits/stdc++.h> using namespace std; #define fi first #define se second #define mp make_pair #define pb emplace_back #define ALL(x) x.begin(),x.end() #define SZ(x) (int)x.size() typedef long long ll; typedef pair<int,int> ii; typedef pair<ii,ii> i4; const int MOD=1000000007; const int INF=1012345678; const ll LLINF=1012345678012345678LL; const double PI=3.1415926536; const double EPS=1e-14; int n,m; char str[1000005]; ll two[1000005]; ll dp(int x,int l,int h,int c){ //printf("%d %d %d %d\n",x,l,h,c); if(h-l>2||c>=5||c<0)return 0; ll ans=0; if(h-l==2){ if(c==(l+h)/2)ans=two[(x+1)/2]; else ans=two[x/2]; }else{ // 1 ans=two[x/2]+two[(x+1)/2]-1; } return ans%m; } int main(){ scanf("%d%d %s",&n,&m,str); two[0]=1;for(int i=1;i<1000005;i++)two[i]=(two[i-1]*2LL)%m; ll ans=0; int lo=2,hi=2,cur=2; for(int i=0;i<n;i++){ if(str[i]=='L')cur++; else{ ans+=dp(n-i-1,lo,max(cur+1,hi),cur+1); //printf("%lld\n",dp(n-i-1,lo,max(cur+1,hi),cur+1)); cur--; } lo=min(cur,lo);hi=max(cur,hi); ans%=m; } printf("%lld",(ans+m+1)%m); }

Compilation message (stderr)

linear_garden.cpp: In function 'int main()':
linear_garden.cpp:37:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   37 |  scanf("%d%d %s",&n,&m,str);
      |  ~~~~~^~~~~~~~~~~~~~~~~~~~~
#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...