Submission #236011

#TimeUsernameProblemLanguageResultExecution timeMemory
236011nicolaalexandraLinear Garden (IOI08_linear_garden)C++14
100 / 100
145 ms37556 KiB
#include <bits/stdc++.h>
#define DIM 1000010
using namespace std;

char v[DIM];
int dp[DIM][3][3];
int n,MOD,i,j,x,y;

int modul (int n){
    if (n < 0)
        return -n;
    return n;
}
int main (){

    //ifstream cin ("date.in");
    //ofstream cout ("date.out");

    cin>>n>>MOD>>v+1;

    /// dp[i][dif_mini][dif_maxi]

    /*for (i=0;i<=2;i++)
        for (j=0;j<=2;j++)
            dp[n+1][i][j] = 1;
    */
    dp[n+1][0][0] = 1;

    for (i=n+1;i>1;i--)
        for (int dif_min=0;dif_min<=2;dif_min++)
            for (int dif_max=0;dif_max<=2;dif_max++){
                if (dif_min != 2)
                    dp[i-1][dif_min+1][max(dif_max-1,0)] = (dp[i-1][dif_min+1][max(dif_max-1,0)] + dp[i][dif_min][dif_max]) % MOD;
                if (dif_max != 2)
                    dp[i-1][max(dif_min-1,0)][dif_max+1] = (dp[i-1][max(dif_min-1,0)][dif_max+1] + dp[i][dif_min][dif_max]) % MOD;
            }

    int mini = 0, maxi = 0, sol = 1;
    for (i=1;i<=n;i++){

        if (v[i] == 'P'){
            /// cate configuratii o sa am daca as pune L aici
            int mini_aux = mini + 1, maxi_aux = max (maxi - 1, 0);
            if (mini_aux <= 2){
                //sol = (sol + dp[i+1][mini_aux+2][maxi_aux]) % MOD;

                for (int x=0;x<=2;x++)
                    for (int y=0;y<=2;y++)
                        if (mini_aux + x <= 2 && maxi_aux + y <= 2)
                            sol = (sol + dp[i+1][x][y]) % MOD;
            }
        }

        if (v[i] == 'L'){
            mini++;
            maxi = max (maxi-1,0);
        } else {
            mini = max (mini-1,0);
            maxi++;
        }
    }

    cout<<sol;

    return 0;
}

Compilation message (stderr)

linear_garden.cpp: In function 'int main()':
linear_garden.cpp:19:19: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
     cin>>n>>MOD>>v+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...