今天的模拟赛关于位运算。上午的省选模拟赛感觉很抽象,思考了一下没有做,大概能看出来 T1 线段树 or 分块,T2 状压 dp,T3 昨天说过是个虚树。嗯嗯,不会,现在就是看题大概有个思路,但是不会写,基础的也掌握不好,容易理解错题意,这个后期需要通过做题多多练习。(T1 正解他们说是线段树分治,嗯嗯不会,太抽象了,T2 状压不会设状态)。
之前 rating 几乎炸了,今天下午的模拟赛多少骗了点分。(然而只做了一个半小时,感觉这个也需要训练,我认真做题的专注时间无法超过半个小时)
1.P2114 [NOI2014] 起床困难综合症 传送门
1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const int N = 1e5 +10; 5 int n; 6 ll m; 7 char ch[5]; 8 struct{ 9 int op; 10 ll t; 11 }a[N]; 12 ll calc(int bit, ll now) 13 { 14 for(int i = 1; i <= n; i ++ ) 15 { 16 ll x = a[i].t >> bit & 1; 17 if(a[i].op == 1) now &= x; 18 else if(a[i].op == 2) now |= x; 19 else now ^= x; 20 } 21 return now; 22 } 23 int main() 24 { 25 scanf("%d%lld", &n, &m); 26 for(int i = 1; i <= n; i ++ ) 27 { 28 scanf("%s%d", ch, &a[i].t); 29 if(ch[0] == 'A') a[i].op = 1; 30 else if(ch[0] == 'O') a[i].op = 2; 31 else a[i].op = 3; 32 } 33 ll val = 0, ans = 0; 34 for(int bit = 29; bit >= 0; bit -- ) 35 { 36 int res1 = calc(bit, 1); 37 int res0 = calc(bit, 0); 38 if(val + (1 << bit) <= m && res0 < res1) 39 val += (1 << bit), ans += res1 << bit; 40 else ans += res0 << bit; 41 } 42 printf("%lld", ans); 43 }
考场上不会,后来看的
最近的小反思:
1.阅读题意有障碍:读不懂题目 or 错误的理解题意,导致把题想难然后放弃。
2.做题的随意性太大:有时候看一眼题面,不对口味(?)就直接放弃并跳过,并且大概率题目不会再读第二遍。
3.模拟赛考场上坐不住:很难坚持到 2h 以上,一般打到一半就会很崩溃想放弃。
4.不喜欢打暴力 and 没有拿部分分的习惯:这个不好,之前养成的错误的习惯是看到一个题对味就和它死磕(然后后面的题就不管了,磕到觉得调对了为止,然后就开始摆烂。可以说我的 noip 2022 就是这么挂的,做了 2h 水了水 T1 就开始睡觉了...)。建议每个题都先写写暴力,现在还远远不及一眼正解的水平,写暴力有利于对题目深入的思考,更容易从中 get 到题目的内涵和解决题目的真正要点。另外可以骗点分,哪怕是爆搜。
说到这个,emmm我一直不会爆搜,这阵子才练起来,最暴力的暴力起码不会爆零。
其实最近有些进步了,已经能突破 100 pts 的瓶颈了。相比之前后面的题都不看,我确实有了很大的进步(认真)。但是还需继续练习各题的暴力!
一些解决方案嘛:
1.多做题,多阅读。注意积累,多写题解多交流才能学好 oi !!!
2.emmm,强迫自己打模拟赛时先把每一道题都读一遍!
3.喝水,中间可以去走廊上转转,但是集中注意力不要泄气。
4.emmmm 多练练罢,毕竟现在咱 rating 都靠这个了(悲)。
总结嘛:之前在大实几乎没打过模拟赛,现在在这边 emmmm 受到各方面的打击也在慢慢适应和进步罢。
今年省选咱也去。说给自己:希望能不忘最初的梦想,不忘曾今受过的鼓舞,不忘在旅途中看过那美丽的风景,曾遇见的温暖。很感谢在 oi 圈子里遇见这么多美好的事情,和美好的人。那么请继续坚定且自信的走下去吧!
曾一次次想放弃,一次次又坚持了下去。如果放弃了,我对不起曾今帮助过我、鼓励过我的人,更对不起我自己。
Keep going!!! Fightttttttt!!!!!!