Submission #565621

#TimeUsernameProblemLanguageResultExecution timeMemory
565621shrimbXylophone (JOI18_xylophone)C++17
0 / 100
82 ms196200 KiB
#pragma GCC optimize ("Ofast")
#pragma GCC target ("avx,avx2,fma")

#include "xylophone.h"
#include"bits/stdc++.h"
using namespace std;

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

template<class x>
using ordered_set = tree<x, null_type,less<x>, rb_tree_tag,tree_order_statistics_node_update>;

// #define int long long
#define endl '\n'
#define mod 1000000007
//\
#define mod 1686876991

const int maxn = 5001;
int n;
int d[maxn];

int dp[maxn][maxn][2];
bool best[maxn][maxn][2];

bool rec (int i, int sm, bool seen) {
    if (sm > n || sm < 1 || (sm == n and !seen)) return 0;
    if (i == n - 1) return 1;
    if (dp[i][sm][seen] != -1) return dp[i][sm][seen];
    auto A = rec(i + 1, sm + d[i], seen || (sm + d[i] == n));
    auto B = rec(i + 1, sm - d[i], seen || (sm - d[i] == n));
    if (A) best[i][sm][seen] = 1;
    else best[i][sm][seen] = 0;
    return dp[i][sm][seen] = (A || B);
}

void follow (int i, int sm, bool seen) {
    cerr << sm << " ";
    answer(i + 1, sm);
    if (i >= n - 1) return;
    if (best[i][sm][seen]) follow(i + 1, sm + d[i], seen || (sm + d[i] == n));
    else follow(i + 1, sm - d[i], seen || (sm - d[i] == n));
}

void solve(int N) {
    n = N;
    memset(dp, -1, sizeof dp);
    for (int i = 2 ; i <= n ; i++) d[i-2] = query(i-1,i);
    for (int i = 1 ; i <= n ; i++) {
        if (rec(0, i, i==1)) {
            follow(0, i, i==1);
            return;
        }
    }
}

Compilation message (stderr)

xylophone.cpp:18:1: warning: multi-line comment [-Wcomment]
   18 | //\
      | ^
xylophone.cpp: In function 'bool rec(int, int, bool)':
xylophone.cpp:36:28: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
   36 |     return dp[i][sm][seen] = (A || B);
      |            ~~~~~~~~~~~~~~~~^~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...