Day 7

Day 7

早上

起来的时候嗓子疼得要命.

zyq 翻了下发现没有可用的药. 并且他半夜抽筋了(?).

zyq 建议我今天不去东师了(因为讲的是字符串而且可以上腾讯会议), 我思考半晌做出了决策:

不过是些许风霜罢了

不过是些许风霜罢了.

上楼吃了点烧卖喝了口橙汁(我怀疑我是上火了所以补充点维他命C).

上午

东师原住民被叫出去开会了. 隐约偷听到了一些类似, “不要对 OI 有功利性” 的话.

发现 lzy 掏出了一瓶“紫气东来”的葡萄饮料, 然后我看成了:

\[\LARGE \textcolor{purple}{三气归来!!} \]

三气归来!
三气归来!

行呗. 电脑熄火了一次.

dyx 进行了一次民意调查, 问我们回去之后的打算.

神了.

image
image
image
image
image
image
image
image
image
image

然后电脑又熄火了.

突然想到了一些东西,

image
image
image
image
image

行呗.

DP T2

给你 \(n\)\(k\) 让你对可重集 \(S, |S| = n \land \sum_{i \in S} = k\) 计数.

\(\forall i \in S, i = \frac{1}{2^k}\)

我们可以把集合从小到大排序, 然后发现可以视为对一个 \(S = {1} \times n\) 的可重集合做若干次前缀折半操作, 然后 dp 方程显然.

\[f_{i, j} \leftarrow f_{i - 1, j - 1} + f_{i, j \times 2} \]

切了.

#include <bits/stdc++.h>
using namespace std;

namespace OI {

#define int long long
#define endl "\n"

constexpr int maxn = 3005, mod = 998244353;

int n, k;
int f[maxn][maxn];

void main() {
    cin >> n >> k;
    f[0][0] = 1;
    for (int i = 1; i <= n; i++) {
        for (int j = i; j >= 1; j--) {
            f[i][j] += f[i - 1][j - 1];
            if ((j << 1) <= i)
                f[i][j] += f[i][j << 1];
            f[i][j] %= mod;
        }
    }
    cout << f[n][k] << endl;
}

#undef int
#undef endl

}

int main() {
    cin.tie(0), cout.tie(0);
    ios::sync_with_stdio(0);

    OI::main();

    return 0;
}

模数写成 \(99824353\) 调半天, 今天不适合写代码.

DP T3

给你一个序列 \(a\), 每次操作可以让 \(a_i \pm 1\), 求最少操作次数让这个序列变成严格上升序列.

我们知道非严格上升是简单的, 那么我们可以让 \(a_i \leftarrow a_i - i\) 转化这个问题.

用堆维护就好了.

#include <bits/stdc++.h>
using namespace std;

namespace OI {

#define int long long
#define endl "\n"

constexpr int maxn = 3005;

int n, a[maxn];

void main() {
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> a[i],
        a[i] -= i;
    int ans = 0;
    priority_queue<int, vector<int>, less<int>> heap;
    for (int i = 1; i <= n; i++) {
        heap.push(a[i]);
        ans += heap.top() - a[i];
        heap.pop();
        heap.push(a[i]);
    }
    cout << ans << endl;
}

#undef int
#undef endl

}

int main() {
    cin.tie(0), cout.tie(0);
    ios::sync_with_stdio(0);

    OI::main();

    return 0;
}

Challenge

我可以在仅使用 C89 语法且不使用 #include 和 while 的前提下通过 AT_arc107_d 吗?

有何不敢?!

typedef signed int int32_t;
typedef signed long long int64_t;
typedef unsigned int uint32_t;
typedef unsigned long long uint64_t;
typedef char uint8_t;

inline void putchar(uint8_t c) {
    __asm__ volatile (
        "syscall"
        :
        : "a"(1),
          "D"(1),
          "S"(&c),
          "d"(1)
        : "rcx", "r11", "memory"
    );
}

inline uint8_t getchar(void) {
    uint8_t c;
    int64_t ret;

    __asm__ volatile (
        "syscall"
        : "=a"(ret)
        : "a"(0),
          "D"(0),
          "S"(&c),
          "d"(1)
        : "rcx", "r11", "memory"
    );
    return c;
}

inline uint32_t read(void) {
    int32_t x = 0, f = 1;
    uint8_t ch = getchar();
    loop_1:
    if (ch < '0' || ch > '9') {
        if (ch == '-')
            f = -1;
        ch = getchar();
        goto loop_1;
    }
    loop_2:
    if (ch >= '0' && ch <= '9') {
        x = x * 10 + (ch - '0');
        ch = getchar();
        goto loop_2;
    }
    return x * f;
}

inline void write(int32_t x) {
    if (x > 10)
        write(x / 10);
    putchar(x % 10 + '0');
}

const int32_t maxn = 3005, mod = 998244353;

int32_t n, k;
int64_t f[maxn][maxn];

int32_t main() {
    n = read(), k = read();
    f[0][0] = 1;
    uint32_t i = 1;
    loop_1:
    if (i <= n) {
        uint32_t j = i;
        loop_2:
        if (j >= 1) {
            f[i][j] += f[i - 1][j - 1];
            if ((j << 1) <= i)
                f[i][j] += f[i][j << 1];
            f[i][j] %= mod;
            j--;
            goto loop_2;
        }
        i++;
        goto loop_1;
    }
    write(f[n][k]);
    putchar('\n');
    return 0;
}

下午休息

回来路上花 \(21\) 买了七个橘子, 嗓子好了.

九块钱的土豆泥可乐鸡翅饭是啥啊?!

吃了, 能吃.

大抵是打了半天三国杀之在打麻将

我再也不贪了

有一把四暗刻被 zyq 抢自摸了. zyq 还抢了 lyd 一波.

zyq 天克四暗刻啊.

喜报:lyd 成为了我们几个之中第一个有面麻役满的人!(四暗刻)

还有一把本来可以荣和三暗刻结果贪心想追四暗刻成听零张了.

四处发癫.

不过最后还是做出来了清一色.

清一色

亲家自摸立直朵拉 \(2\) 拔北……

我不会算, 反正是三倍跳满

还诈和了个龙七对.

不过最后还是吃一了.

真是罕见.

晚上看了下喜剧 Yes Minister. 好看, 推荐.

晚上

神了, zyq 突然说他抽筋, 过了一会他没声了我开始抽筋了.

奇怪, 喝了三杯咖啡还是这么困.

返回目录

posted @ 2026-08-02 15:46  Kibrel  阅读(10)  评论(0)    收藏  举报