제출 #1199011

#제출 시각아이디문제언어결과실행 시간메모리
1199011_noobLinear Garden (IOI08_linear_garden)C++20
0 / 100
1 ms328 KiB
#pragma GCC optimize("Ofast")
#include <iostream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <vector>
#include <set>
#include <map>
#include <deque>
#include <stack>
#include <queue>
#include <algorithm>
#include <cassert>
#include <random>
#include <chrono>
#include <iomanip>
#include <cmath>
#include <bitset>
#include <functional>
#include <numeric>
#define int long long
#define double long double
#define ii pair<int,int>
#define iii pair<int, ii >
#define fi first
#define se second
#define getbit(x,y) (((x)>>(y))&1ll)
#define turnon(x,y) ((x)|(1ll<<y))
#define turnof(x,y) ((x)^(1ll<<y))
#define oo 1e18
#define pb push_back
#define all(x) x.begin(),x.end()
#define con(mask) mask=(mask-1)&mask
#define Unique(val) val.erase(unique(val.begin(),val.end()),val.end())
#define ll long long
#define rand_int mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define rand_ll mt19937_64 rnd(chrono::steady_clock::now().time_since_epoch().count());

const int mod = 1e9 + 7;
const double pi = acos(-1);
const int N = 450;
const double esp = 1e-9;
int base = 100000;

using namespace std;

int n, m;
string s;
int f[1000005];
void add(int &x, int y) {
    x += y;
    if(x >= m) x -= m;
}

int dp[2][5][5][5][2];
// dp[i][sum][mx][mn][is_less]

void sol_1() {
    dp[0][2][2][2][0] = 1;
    for(int i = 0; i < n; i++) {
        int nx = 1 - i % 2;
        int cur = i % 2;
        for(int sum = 0; sum <= 4; sum++) {
            for(int mx = 2; mx <= 4; mx++) {
                for(int mn = 0; mn <= 2; mn++) {
                    for(int is_less = 0; is_less <= 1; is_less++) {
                        int new_sum = sum + 1;
                        int new_mx = max(mx, new_sum);
                        int new_mn = min(mn, new_sum);

                        if(mx - mn <= 2) {
                            // set L
                            add(dp[nx][new_sum][new_mx][new_mn][is_less || (s[i] == 'P')], dp[cur][sum][mx][mn][is_less]);
                        }

                        new_sum = sum - 1;
                        new_mx = max(mx, new_sum);
                        new_mn = min(mn, new_sum);
                        if(mx - mn <= 2 && (is_less || (s[i] == 'P'))) {
                            // set P
                            add(dp[nx][new_sum][new_mx][new_mn][is_less], dp[cur][sum][mx][mn][is_less]);
                        }
                    }
                }
            }
        }
        memset(dp[cur], 0, sizeof(dp[cur]));
    }

    int ans = 0;
    for(int sum = 0; sum <= 4; sum++) {
        for(int mx = 2; mx <= 4; mx++) {
            for(int mn = 0; mn <= 2; mn++) {
                for(int is_less = 0; is_less <= 1; is_less++) {
                    if(mx - mn <= 2) {
                        add(ans, dp[n % 2][sum][mx][mn][is_less]);
                    }
                }
            }
        }
    }

    cout << ans;
}

void sol_2() {

}

void solve() {

    cin >> n >> m >> s;

    sol_1();

    // sol_2();

}

signed main() {


    #ifndef ONLINE_JUDGE
    freopen("inp.inp", "r", stdin);
    freopen("out.out", "w", stdout);
    #endif


    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);

    int t = 1;
    //cin >> t;


    while(t--) {
        solve();
    }
}
//      ProTeam
//(¯`·.·´¯) (¯`·.·´¯)
//`·.¸(¯`·.·´¯)¸ .·
//×°× ` ·.¸.·´ ×°×

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

linear_garden.cpp: In function 'int main()':
linear_garden.cpp:125:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  125 |     freopen("inp.inp", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
linear_garden.cpp:126:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  126 |     freopen("out.out", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#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...