Submission #121450

#TimeUsernameProblemLanguageResultExecution timeMemory
121450TadijaSebezLinear Garden (IOI08_linear_garden)C++11
100 / 100
26 ms6248 KiB
#include <stdio.h> const int N=1000050; int mod,po[N]; int CountAll(int n){ return (po[n/2+1]+po[(n+1)/2]-2+mod)%mod;} int CountLo(int n){ return po[n/2];} int CountHi(int n){ return po[n/2];} int CountMid(int n){ return po[(n+1)/2];} char s[N]; int max(int a, int b){ return a>b?a:b;} int min(int a, int b){ return a>b?b:a;} int main() { int n,i; scanf("%i %i",&n,&mod); scanf("%s",s+1); int cnt=0,Min=0,Max=0,sol=0; po[0]=1; for(i=1;i<=n;i++) po[i]=po[i-1]*2%mod; for(i=1;i<=n;i++) { if(s[i]=='L') cnt++,Max=max(Max,cnt),Min=min(Min,cnt); else { if(Max-Min==2) { if(cnt==Min) { sol+=CountMid(n-i); if(sol>=mod) sol-=mod; } else if(cnt!=Max) { sol+=CountHi(n-i); if(sol>=mod) sol-=mod; } } else if(Max-Min==1) { if(cnt==Min) { sol+=CountMid(n-i)+CountHi(n-i)-1+mod; while(sol>=mod) sol-=mod; } else { sol+=CountHi(n-i); if(sol>=mod) sol-=mod; } } else { sol+=CountMid(n-i)+CountHi(n-i)-1+mod; while(sol>=mod) sol-=mod; } cnt--; Max=max(Max,cnt); Min=min(Min,cnt); //printf("%i: %i\n",i,sol); } } sol++; if(sol>=mod) sol-=mod; printf("%i\n",sol); return 0; }

Compilation message (stderr)

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