Submission #640363

# Submission time Handle Problem Language Result Execution time Memory
640363 2022-09-14T11:06:26 Z PoonYaPat Linear Garden (IOI08_linear_garden) C++14
95 / 100
100 ms 2416 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

ll n,mod,ans;
string s;

ll power(ll a, ll n) {
    ll res=1;
    while (n) {
        if (n%2==1) res=(res*a)%mod;
        a=(a*a)%mod;
        n/=2;
    }
    return res;
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin>>n>>mod>>s;

    int dif=2,mmax=2,mmin=2;

    for (int i=0; i<n; ++i) {
        if (s[i]=='P' && dif<=mmin+1) { //consider if P change to L

            int ma=max(mmax,dif+1), mi=mmin;

            if (ma-mi==2) {
                if (dif==mi) ans=(ans+power(2,(n-i)/2))%mod; //dif+1 is on the center of the strip
                else ans=(ans+power(2,(n-i-1)/2))%mod;

            } else {
                ans=(ans+power(2,(n-i)/2)+power(2,(n-i-1)/2)-1)%mod;
            }
        }

        if (s[i]=='L') ++dif;
        else --dif;
        mmax=max(mmax,dif);
        mmin=min(mmin,dif);
    }
    cout<<ans+1;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 320 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 320 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 320 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 316 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 320 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 1 ms 320 KB Output is correct
3 Correct 1 ms 212 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 468 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 4 ms 468 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 22 ms 1220 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 13 ms 1244 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 30 ms 1384 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 30 ms 2068 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 76 ms 2416 KB Output is correct
2 Correct 32 ms 2300 KB Output is correct
3 Correct 100 ms 2400 KB Output is correct