제출 #219835

#제출 시각아이디문제언어결과실행 시간메모리
219835mohamedsobhi777Linear Garden (IOI08_linear_garden)C++14
6 / 100
1597 ms65540 KiB
#include <bits/stdc++.h> using namespace std ; const int N = 5e5 + 7 ; long long n , mod , ans ; string s ; int mv2[2] = {0 , 1} , mv1[2] = {1 , 0} ; long long add (long long a , long long b){ return (a%mod + b%mod + mod) %mod ; } int dp[N][3][3][3]; void normalize(int &a , int &b , int &A , int &B){ int mn = min(a , b) ; a-=mn ; b-=mn; A = max( A , a - b ); B = max(B , b - a); } long long solve(int i , int ab , int A , int B){ int a = max(0 , ab-2) ; int b = max(0 , 2-ab) ; if(dp[i][ab][A][B]!=-1) return dp[i][ab][A][B] ; if( a + B > 2 || b + A > 2 ) return 0 ; if(i==n){ return 1 ; } long long ret = 0 ; for(int j = 0 ; j< 2 ;j++){ int na = a + mv1[j] ; int nb = b + mv2[j] ; int tmpA = A; int tmpB = B; int nab = na - nb + 2 ; if(nab <0 || nab > 4)continue ; normalize(na , nb , tmpA , tmpB) ; ret= add(ret , solve(i+1 , nab , tmpA , tmpB)) ; } return dp[i][ab][A][B] = ret ; } int smart(int i , int l , int d , int b, int val){ if(i > n)return 0 ; if(i==n){ return 1 ; } int ret = 0 ; ret+=smart(i+1 , 1 - l , 0 , d , val* 10 + 1-l) ; if(!b){ if(d){ ret+=smart(i+2 , 1-l , 1 , 0 , (val*10 + 1- l)*10 + 1-l ) ; }else{ ret+=smart(i+2 , 1-l , 1 ,0 , (val*10 + 1-l) * 10 + 1-l ) ; } } return ret ; } int smart_solve(int i , int l , int d , int b){ if(!l)b =1 ; int ret = smart(i , l , d , b , 0); return ret ; } void brute(int i , string ss){ if(i==n){ for(int j = 0 ; j < n;j++){ int a = 0 , b = 0 ; for(int k = j ; k < n ;k++){ if(ss[k]=='L'){ a++ ; }else{ b++ ; } if(abs(a - b) > 2) return ; } } cout<<ss<<"\n" ; return ; } brute(i+1 , ss+'L') ; brute(i+1 , ss+'P') ; } int main(){ memset(dp , -1 , sizeof dp) ; ios_base::sync_with_stdio(0) ; cin.tie(0) ; //freopen("in.in" , "r" , stdin) ; cin>>n>>mod ; cin>> s ; int a = 0, b =0; int A = 0, B = 0; int ab = 0 ; int l = 1 ; int d = 0 ; int bad = 0 ; int val = 0 ; for(int i = 0 ;i < n;i++){ if(s[i] == 'L'){ l = 0 ; val = val*10 + l ; }else{ val = val * 10 + 1 ; int cant = 0 ; if(i > 1){ if(s[i-1]=='L' && s[i-2] == 'L'){ cant = 1 ; } } if(cant)continue ; if(i > 1 && l==1)d = 1 ; ans=add (ans , smart_solve(i , l , d ,0 ) ); l = 1 ; } } cout<<add(ans , 1); return 0 ; }

컴파일 시 표준 에러 (stderr) 메시지

linear_garden.cpp: In function 'int main()':
linear_garden.cpp:101:9: warning: unused variable 'a' [-Wunused-variable]
     int a = 0, b =0; 
         ^
linear_garden.cpp:101:16: warning: unused variable 'b' [-Wunused-variable]
     int a = 0, b =0; 
                ^
linear_garden.cpp:102:9: warning: unused variable 'A' [-Wunused-variable]
     int A = 0, B = 0; 
         ^
linear_garden.cpp:102:16: warning: unused variable 'B' [-Wunused-variable]
     int A = 0, B = 0; 
                ^
linear_garden.cpp:103:9: warning: unused variable 'ab' [-Wunused-variable]
     int ab = 0 ; 
         ^~
linear_garden.cpp:107:9: warning: unused variable 'bad' [-Wunused-variable]
     int bad = 0 ; 
         ^~~
#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...