0%

2023春季赛场外口胡记

今天学考,中午看见洛谷有个春季赛自测的比赛。就参赛了想看看现在啥水平(主要是现在有闲

仨月没碰 OI

没掐表,但是五点半到家开写,除去吃饭和打游戏的俩小时其实还真没到四个半点(

写不下去了 写写场外游记罢

T1 涂色游戏

感觉挺典的二维拍成一维处理 直接开写

半个小时左右整出来了 在 Lg 和 InfOJ 上测都切了(好水

思路就是记录下来每次操作的 【行 / 列 、颜色、操作序号(这是第几次操作)】

输出的时候,对于 第 $i$ 行第 $j$ 列来说,它的颜色就是 【第 $i$ 行 、第 $j$ 列最后一次操作时的颜色】

好像是线性复杂度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include<bits/stdc++.h>
using namespace std;

const int maxN = 1e5+10;

struct Opt{
int id;
int color;
Opt(){};
Opt(int id,int color) : id(id),color(color){};
}Hang[maxN],Lie[maxN];

inline void solve(){
int N,M,Q;
int opt,x,c;

scanf("%d%d%d",&N,&M,&Q);

memset(&Hang,0,sizeof(Hang));
memset(&Lie,0,sizeof(Lie));

while(Q--){
scanf("%d%d%d",&opt,&x,&c);
//覆盖
if(opt == 0){
Hang[x] = Opt(Q+1,c);
}else Lie[x] = Opt(Q+1,c);
}

for(int i = 1;i<=N;i++){
for(int j = 1;j<=M;j++){
if(Hang[i].id + Lie[j].id == 0) printf("0 ");//未被染色
else if(Hang[i].id * Lie[j].id == 0){ // 只被染色一次
if(Hang[i].id) printf("%d ",Hang[i].color);
else printf("%d ",Lie[j].color);
}else{ //被染色多次,看最后一次染色时的颜色
if(Hang[i].id < Lie[j].id) printf("%d ",Hang[i].color);
else printf("%d ",Lie[j].color);
}
}
putchar('\n');
}

}

int main(){
int T;
scanf("%d",&T);
while(T--) solve();
return 0;
}

T2 幂次

好像数学题 直接暴力(

先快速幂求出来 $i^k$ 的值,再依次累乘 $i$ 同时记录数量

然后拿 unordered_set 去重

大概是 $\sqrt{N}$ 级别的?

测了,交第一遍拿了 $70$,改来改去第二遍就 $40$ 了(挥拳

不过如果是 OI 赛制的话估计就估分 $70$ 力

T3 圣诞树

比较麻

预处理每两个点之间的距离,深搜找答案

阶乘级别的恐怖速度

进行了一点没啥用的小剪枝 + 随机化 + 卡时处理

大概是 $30$ pts 左右

写这篇的时候才发现特殊性质 B 好像可以直接顺次连起来(?

T4 密码锁

一眼看见“最大值最小”,这不二分之后变存在性问题吗

心情++,愉快开写

把二分框架写完了才发现我好像不知道该怎么 check ,寄!

心情 - -,写不下去了,开摆!


说句闲话,今天是真他妈冷啊

在学考考点冻懵了