提交记录 14247


用户 题目 状态 得分 用时 内存 语言 代码长度
user1 2003. 【NOI2020】美食家(加强版) Accepted 100 1.25 s 222800 KB C++ 3.65 KB
提交时间 评测时间
2020-09-19 01:52:38 2020-09-19 01:53:13
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
long long ymm[4];
#define READ(i) asm volatile("vmovupd %%ymm" #i ", %0": "=m"(ymm))
#define WRITE(i) asm volatile("vmovupd %0, %%ymm" #i : : "m"(ymm))
const int MAXN = 100;
const int MAXM = 1000;
const int MAXW = 100;
const int MAXK = 10002;

static inline void upd(ll& x, const ll y) {
    x -= ((x - y) & ((x - y) >> 63));
}

static int n, m, c[MAXN];
struct Edge {
    char u, v, w;
} e[MAXM];
struct Event {
    int t, x, y;
    bool operator <(const Event& rhs) const {
        return t < rhs.t;
    }
} q[MAXK];
static ll pool[500000][MAXN];
static ll (*buf)[MAXN] = &pool[0];
static int xjj;
struct Pre {
    ll (*dp)[MAXN];
    int orig, anot; ll dx;
    void init(int s) {
        dp = buf;
        memset(dp, 0xcc, sizeof(*dp) * MAXW);
        dp[0][s] = 0;
        vector<ull> hs;
        for (int i = 0;; i++) {
            for (int j = 0; j < n; j++)
                dp[i][j] += c[j];
            ull h = 0;
            for (int j = 0; j < n; j++)
                h ^= (j + 1) * (ull) (dp[i][j] - dp[i][s]);
            hs.push_back(h);

            if (xjj) {
                if (i > xjj + MAXW && !memcmp(hs.data() + i - xjj - MAXW, hs.data() + i - MAXW, MAXW * sizeof(ull))) {
                    orig = i - xjj;
                    anot = i;
                    break;
                }
            } else {
                for (int j = MAXW; j + MAXW < i; j++)
                    if (!memcmp(hs.data() + i - MAXW, hs.data() + j - MAXW, MAXW * sizeof(ull))) {
                        orig = j;
                        anot = i;
                        goto ok;
                    }
            }

            memset(dp + i + MAXW, 0xcc, sizeof(*dp));
            for (int j = 0; j < m; j++)
                upd(dp[i + e[j].w][e[j].v], dp[i][e[j].u]);
        }
        ok:;
        dx = dp[anot][s] - dp[orig][s];
        xjj = anot - orig;
        buf += anot;
        // fprintf(stderr, "pre %d, orig %d, anot %d, dx %lld\n", s, orig, anot, dx);
    }
    ll query(int T, int t) {
        if (T < anot)
            return dp[T][t];
        return dp[orig + (T - orig) % xjj][t] + (T - orig) / xjj * dx;
    }
} pre[MAXN];

static ll calc(int s, int t, int T) {
    return pre[s].query(T, t) - c[t];
}

int main() {
// #ifdef ONLINE_JUDGE
//     freopen("delicacy.in", "r", stdin);
//     freopen("delicacy.out", "w", stdout);
// #endif
    int T, k;
    cin >> n >> m >> T >> k;
    for (int i = 0; i < n; i++)
        cin >> c[i];
    for (int i = 0; i < m; i++) {
        int u, v, w;
        cin >> u >> v >> w;
        e[i].u = u - 1; e[i].v = v - 1; e[i].w = w;
    }

    for (int i = 0; i < n; i++)
        pre[i].init(i);
    
    cerr << "Loop length " << xjj << ", weight " << pre[0].dx << endl;

    for (int i = 1; i <= k; i++) {
        cin >> q[i].t >> q[i].x >> q[i].y;
        q[i].x--;
    }
    sort(q + 1, q + k + 1);
    q[0].t = 0; q[0].x = 0; q[0].y = 0;
    q[k + 1].t = T; q[k + 1].x = 0; q[k + 1].y = c[0];

    static ll dp[MAXK];
    memset(dp, 0xcc, sizeof(dp));
    dp[0] = 0;
    for (int i = 1; i <= k + 1; i++) {
        for (int j = 0; j < i; j++)
            upd(dp[i], dp[j] + calc(q[j].x, q[i].x, q[i].t - q[j].t));
        dp[i] += q[i].y;
    }
    upd(dp[k + 1], -1);
    cout << dp[k + 1] << endl;

    cerr << buf - pool << endl;
READ(1); WRITE(0);
READ(2); WRITE(1);
READ(3); WRITE(2);
READ(4); WRITE(3);
READ(5); WRITE(4);
READ(6); WRITE(5);
READ(7); WRITE(6);
READ(8); WRITE(7);
READ(9); WRITE(8);
READ(10); WRITE(9);
READ(11); WRITE(10);
READ(12); WRITE(11);
READ(13); WRITE(12);
READ(14); WRITE(13);
READ(15); WRITE(14);
ymm[2]=T, ymm[3]=dp[k+1]; WRITE(15);
    return 0;
}

CompilationN/AN/ACompile OKScore: N/A

Subtask #1 Testcase #1714.699 ms30 MB + 36 KBAcceptedScore: 0

Subtask #1 Testcase #2880.496 ms75 MB + 144 KBAcceptedScore: 100

Subtask #1 Testcase #3809.07 ms57 MB + 44 KBAcceptedScore: 0

Subtask #1 Testcase #4723.198 ms32 MB + 60 KBAcceptedScore: 0

Subtask #1 Testcase #5727.155 ms34 MB + 260 KBAcceptedScore: 0

Subtask #1 Testcase #61.212 s186 MB + 576 KBAcceptedScore: 0

Subtask #1 Testcase #71.034 s153 MB + 344 KBAcceptedScore: 0

Subtask #1 Testcase #8887.222 ms42 MB + 848 KBAcceptedScore: 0

Subtask #1 Testcase #9715.164 ms28 MB + 544 KBAcceptedScore: 0

Subtask #1 Testcase #10747.107 ms32 MB + 540 KBAcceptedScore: 0

Subtask #1 Testcase #11976.354 ms73 MB + 60 KBAcceptedScore: 0

Subtask #1 Testcase #12740.221 ms30 MB + 832 KBAcceptedScore: 0

Subtask #1 Testcase #13727.806 ms26 MB + 764 KBAcceptedScore: 0

Subtask #1 Testcase #141.102 s153 MB + 896 KBAcceptedScore: 0

Subtask #1 Testcase #15705.935 ms30 MB + 736 KBAcceptedScore: 0

Subtask #1 Testcase #16846.692 ms39 MB + 104 KBAcceptedScore: 0

Subtask #1 Testcase #17720.393 ms28 MB + 592 KBAcceptedScore: 0

Subtask #1 Testcase #181.192 s217 MB + 592 KBAcceptedScore: 0

Subtask #1 Testcase #19736.634 ms29 MB + 28 KBAcceptedScore: 0

Subtask #1 Testcase #20711.588 ms31 MB + 340 KBAcceptedScore: 0

Subtask #1 Testcase #21734.527 ms29 MB + 24 KBAcceptedScore: 0

Subtask #1 Testcase #22732.19 ms30 MB + 380 KBAcceptedScore: 0

Subtask #1 Testcase #23725.196 ms34 MB + 568 KBAcceptedScore: 0

Subtask #1 Testcase #24767.849 ms36 MB + 968 KBAcceptedScore: 0

Subtask #1 Testcase #25720.902 ms31 MB + 1020 KBAcceptedScore: 0

Subtask #1 Testcase #26774.486 ms33 MB + 760 KBAcceptedScore: 0

Subtask #1 Testcase #27824.516 ms53 MB + 240 KBAcceptedScore: 0

Subtask #1 Testcase #28722.526 ms35 MB + 900 KBAcceptedScore: 0

Subtask #1 Testcase #29824.378 ms55 MB + 588 KBAcceptedScore: 0

Subtask #1 Testcase #30772.619 ms34 MB + 220 KBAcceptedScore: 0

Subtask #1 Testcase #31786.208 ms32 MB + 704 KBAcceptedScore: 0

Subtask #1 Testcase #32752.543 ms30 MB + 300 KBAcceptedScore: 0

Subtask #1 Testcase #33738.136 ms29 MB + 972 KBAcceptedScore: 0

Subtask #1 Testcase #341.25 s181 MB + 84 KBAcceptedScore: 0

Subtask #1 Testcase #35893.098 ms44 MB + 352 KBAcceptedScore: 0

Subtask #1 Testcase #36829.522 ms38 MB + 84 KBAcceptedScore: 0

Subtask #1 Testcase #37739.55 ms29 MB + 896 KBAcceptedScore: 0

Subtask #1 Testcase #38723.133 ms31 MB + 980 KBAcceptedScore: 0

Subtask #1 Testcase #39753.187 ms32 MB + 600 KBAcceptedScore: 0

Subtask #1 Testcase #40892.48 ms40 MB + 36 KBAcceptedScore: 0

Subtask #1 Testcase #41816.424 ms36 MB + 736 KBAcceptedScore: 0

Subtask #1 Testcase #42749.183 ms32 MB + 688 KBAcceptedScore: 0

Subtask #1 Testcase #43744.396 ms29 MB + 304 KBAcceptedScore: 0

Subtask #1 Testcase #44796.342 ms39 MB + 48 KBAcceptedScore: 0

Subtask #1 Testcase #45743.625 ms31 MB + 48 KBAcceptedScore: 0

Subtask #1 Testcase #46809.978 ms34 MB + 864 KBAcceptedScore: 0

Subtask #1 Testcase #47742.454 ms28 MB + 272 KBAcceptedScore: 0

Subtask #1 Testcase #48723.784 ms33 MB + 192 KBAcceptedScore: 0

Subtask #1 Testcase #49915.201 ms48 MB + 820 KBAcceptedScore: 0

Subtask #1 Testcase #50828.203 ms61 MB + 664 KBAcceptedScore: 0


Judge Duck Online | 评测鸭在线
Server Time: 2026-03-22 21:27:18 | Loaded in 3 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠