Submission #1022763

#TimeUsernameProblemLanguageResultExecution timeMemory
1022763nmtsLinear Garden (IOI08_linear_garden)C++17
95 / 100
202 ms65536 KiB
#include <bits/stdc++.h> #define file(name) freopen(name".inp" , " r " , stdin);freopen(name".out" , " w " , stdout) #define faster ios_base :: sync_with_stdio(false) ; cin.tie(0) ; cout.tie(0) ; #define pii pair < int , int > #define fi first #define se second #define mii map< int , int> #define reset(a,val) memset(a ,val , sizeof(a) ) #define count_bit(i) __builtin_popcountll(i) #define mask(i) ((1LL << (i))) #define status(x, i) (((x) >> (i)) & 1) #define set_on(x, i) ((x) | mask(i)) #define set_off(x, i) ((x) & ~mask(i)) #define endl '\n' #define ll long long const int maxn = 1e6 + 1; const int mod= 1e9 + 7; const ll INF= 3e18 + 5; const int LOG = 20 ; #define dp(i , mi , ma) dp[i][mi + 2][ma] template <class T> inline T sqr(T x) { return x * x; }; template <class T> inline int Power(T x, int y) { if (!y) return 1; if (y & 1) return sqr(Power(x, y / 2)) % mod * x % mod; return sqr(Power(x, y / 2)) % mod; } template<class T> bool minimize(T& a, const T& b) { return b < a ? a = b, 1 : 0; } template<class T> bool maximize(T& a, const T& b) { return a < b ? a = b, 1 : 0; } inline int gcd(int x, int y) { return y ? gcd(y , x % y) : x;} inline int lcm(int x, int y) { return x * y / gcd(x, y); } using namespace std; int n , m; string s; int dp[1000001][3][3]; void solve() { cin >> n >> m >> s; for (int mi = -2; mi <= 0; ++mi) for (int ma = 0; ma <= 2; ++ma) dp(n + 1, mi, ma) = 1; for (int i = n; i >= 1; --i) { for (int mi = -2; mi <= 0; ++mi) { for (int ma = 0; ma <= 2; ++ma) { if (mi > -2) dp(i, mi, ma) += dp(i + 1, mi - 1, max(0, ma - 1)); if (ma < 2) dp(i, mi, ma) += dp(i + 1, min(0, mi + 1), ma + 1); dp(i, mi, ma) %= m; } } } s = " " + s; int ans = 1; for (int i = 1 , mi = 0 , ma = 0 ; i <= n ; ++i) if (s[i] == 'L') { mi--; ma = max(0 , ma - 1); } else { if (mi > -2) ans = (ans + dp(i + 1 , mi - 1 , max(mi - 1 , 0))) % m; ma++; mi = min(0 , mi + 1); } cout << ans << endl; } int main() { faster; solve(); return 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...