Day 7
Day 7
早上
起来的时候嗓子疼得要命.
zyq 翻了下发现没有可用的药. 并且他半夜抽筋了(?).
zyq 建议我今天不去东师了(因为讲的是字符串而且可以上腾讯会议), 我思考半晌做出了决策:

不过是些许风霜罢了.
上楼吃了点烧卖喝了口橙汁(我怀疑我是上火了所以补充点维他命C).
上午
东师原住民被叫出去开会了. 隐约偷听到了一些类似, “不要对 OI 有功利性” 的话.
发现 lzy 掏出了一瓶“紫气东来”的葡萄饮料, 然后我看成了:


行呗. 电脑熄火了一次.
dyx 进行了一次民意调查, 问我们回去之后的打算.
神了.










然后电脑又熄火了.
突然想到了一些东西,





行呗.
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 方程显然.
切了.
#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 突然说他抽筋, 过了一会他没声了我开始抽筋了.
奇怪, 喝了三杯咖啡还是这么困.

浙公网安备 33010602011771号