Submission #1022753

#TimeUsernameProblemLanguageResultExecution timeMemory
1022753nmtsLinear Garden (IOI08_linear_garden)C++17
0 / 100
3 ms348 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 + 6;
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;

ll dp[maxn][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;
    ll 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;

}


int32_t main()
{
    faster;
    #ifndef ONLINE_JUDGE
    file("txt");
    #else
    // online submission
    #endif
    // int t ; cin >> t ; while (t--)
    solve();
    return 0;
} 

Compilation message (stderr)

linear_garden.cpp: In function 'int32_t main()':
linear_garden.cpp:3:27: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    3 | #define file(name) freopen(name".inp" , " r " , stdin);freopen(name".out" , " w " , stdout)
      |                    ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~
linear_garden.cpp:87:5: note: in expansion of macro 'file'
   87 |     file("txt");
      |     ^~~~
linear_garden.cpp:3:63: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
    3 | #define file(name) freopen(name".inp" , " r " , stdin);freopen(name".out" , " w " , stdout)
      |                                                        ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
linear_garden.cpp:87:5: note: in expansion of macro 'file'
   87 |     file("txt");
      |     ^~~~
#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...