Submission #312413

#TimeUsernameProblemLanguageResultExecution timeMemory
312413mohamedsobhi777Linear Garden (IOI08_linear_garden)C++14
40 / 100
1587 ms36116 KiB
#include<bits/stdc++.h> #pragma GCC optimize("-Ofast") //#pragma GCC optimize("trapv") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,sse4.2,popcnt,abm,mmx,avx2,tune=native") #pragma GCC optimize("-ffast-math") #pragma GCC optimize("-funroll-loops") #define I inline void #define S struct #define vi vector<int> #define vii vector<pair<int,int>> #define pii pair<int,int> #define pll pair<ll,ll> using namespace std ; using ll = long long ; using ld = long double ; const int N = 2e5 + 7 ; const ll inf = 2e18 ; // How interesting! int n, mod; int dp[N][3][3][3] ; string s ; void normalize(int &a , int &b , int &A , int &B){ int mn = min(a , b) ; a-=mn ; b-=mn ; A = min(A , a - b + 2); B = max(B , a - b + 2); } inline int add(int x, int y){return x + y >= mod ? x + y - mod : x + y ;} int solve(int i , int cur ,int A , int B){ if(abs(A - B) > 2)return 0 ; if(i == n)return 1 ; if(~dp[i][cur][A][B]) return dp[i][cur][A][B] ; int ret = 0 ; ret = add(ret , solve(i + 1, cur + 1, A , max(B , cur + 1) ) ) ; ret = add(ret , solve(i + 1, cur - 1, min(A , cur - 1) , B ) ) ; return ret; } int main(){ ios_base::sync_with_stdio(0) ; cin.tie(0) ; //freopen("in.in" , "r" , stdin) ; memset(dp , -1 , sizeof dp) ; cin >> n >> mod >> s ; int a = 2 , b = 2 , A = 2 , B = 2 ; int ans = 0 ; for(int i = 0 ; i < n; ++ i){ //cout<< a <<" " << b <<" " << A <<" "<< B<<"*\n" ; if(s[i] == 'L'){ // 0 a ++ ; normalize(a , b, A , B) ; }else{ // 1 int a0 = a + 1; int b0 = b; int A0 = A ; int B0 = B ; normalize(a0 , b0 , A0 , B0) ; int cur = a0 - b0 + 2 ; ans += solve(i + 1, cur , A0 , B0) ; b ++ ; normalize(a , b , A , B) ; } } cout<< ++ ans % mod ; return 0 ; } /* - bounds sir (segtree = 4N, eulerTour = 2N, ...) - a variable defined twice? - will overflow? - is it a good complexity? - don't mess up indices (0-indexed vs 1-indexed) - reset everything between testcases. */
#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...