Submission #1152160

#TimeUsernameProblemLanguageResultExecution timeMemory
1152160son2008Linear Garden (IOI08_linear_garden)C++20
100 / 100
284 ms9188 KiB
#include<bits/stdc++.h> using namespace std; #define task "task" #define ii pair<int,int> #define fi first #define se second #define int long long #define ll long long #define ld double #define mp make_pair #define lg2 30 #define iii pair<int,ii> #define iiii pair<ii,ii> #define base 29 #define eps 1e-8 int dx[]= {0LL,0LL,1,-1,1,1,-1,-1}; int dy[]= {1,-1,0LL,0LL,1,-1,1,-1}; const int maxn=1e6+5; const int mod=1e9+7; int n,M,a[maxn]; void init() { string s; cin>>n>>M>>s; for(int i=0;i<n;i++) { a[i+1]=s[i]=='P'; } } //f[i][cnt][max][min][t] void add(int &a,int b) { a=(a+b)%M; } int f[2][5][5][5][2]; void process() { f[0][2][2][2][0]=1; for(int i=0;i<n;i++) { for(int cnt=0;cnt<=4;cnt++) { for(int mx=2;mx<=4;mx++) { for(int mn=0;mn<=2;mn++) { for(int t=0;t<=1;t++) { int cnt1=cnt-1,mx1=max(mx,cnt1),mn1=min(mn,cnt1); if(mx1-mn1<=2) { add(f[(i+1)&1][cnt1][mx1][mn1][t||a[i+1]],f[i&1][cnt][mx][mn][t]); } cnt1=cnt+1,mx1=max(mx,cnt1),mn1=min(mn,cnt1); if(mx1-mn1<=2&&(t||a[i+1])) { add(f[(i+1)&1][cnt1][mx1][mn1][t],f[i&1][cnt][mx][mn][t]); } } } } } memset(f[i&1],0,sizeof(f[i&1])); } int ans=0; for(int cnt=0;cnt<=4;cnt++) { for(int mx=2;mx<=4;mx++) { for(int mn=0;mn<=2;mn++) { for(int t=0;t<=1;t++) { add(ans,f[n&1][cnt][mx][mn][t]); } } } } cout<<ans; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); if(fopen(task".inp","r")) { freopen(task".inp","r",stdin); freopen(task".out","w",stdout); } init(); process(); cerr <<endl<< "TIME : " << clock() * 0.001 << "s" << endl ; }

Compilation message (stderr)

linear_garden.cpp: In function 'int main()':
linear_garden.cpp:88:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   88 |         freopen(task".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
linear_garden.cpp:89:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   89 |         freopen(task".out","w",stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
#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...