今天学考,中午看见洛谷有个春季赛自测的比赛。就参赛了想看看现在啥水平(主要是现在有闲
仨月没碰 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
,寄!
心情 - -,写不下去了,开摆!
说句闲话,今天是真他妈冷啊
在学考考点冻懵了