考试心得3
2024/9/15
link:https://www.gxyzoj.com/d/hzoj/contest/66b0925b7509073c6b14ab11/problems
考试时感觉眼睛想流眼泪,感冒还没好( 做梦一样考完了
还挺后悔的,暴力分很多,T3打了1.5小时0蛋,发现自己就不应该写二分啊
T1,暴力40分走人,不会状压dp,考完后看着wsq的代码一点一点理解了,但预处理挺奇妙的。我何时才能自己推出状压式子啊,阿布,是何时才能想出状态设定啊,没底气。。。
T2,暴力40分走人。貌似是细节题,不想改。但最后改完辣!
T3,前两道题加起来一个半小时就打完了,此题暴力却搞了甚久,始终认为它是二分,导致写得全错了。本来想挽救一下,但实在没想到真的就是无脑枚举啊!考后改了改(指改了1小时)就拿到79分的好成绩,加上map的优化(指无脑记录重复数据)即可获得99pts!!虽然这一分让我调了2个小时,但真的,双哈希也能卡过啊!!!这个题告诉我们:宁可打无脑暴力,也不能空手而归,还有,自己曾经总结的哈希区间求值是从1开始的!!!一定要看仔细!!!
T4没时间了,10分就丢了。又又又......又垫底了。T-T
2024/9/16
link:https://www.gxyzoj.com/d/hzoj/contest/66e776d4f8a2945801bcd317/problems
祝wsq生日快乐,可惜她没来
但波波买了奶茶,还是挺好的(不甜
今天挂38pts,垫底again,就是说四五十分就差了20个人左右,分差头一次真么紧。
省流:打暴力的两天。
T1,数据大水题。原题好像是dp和线段树,应该挺难的,但由于是波波的随机化数据,很简单的能被HACK的代码也能A,但自己因为手造的数据卡了两个小时,100->82,,,
T2,考场暴力数组开大TLE,20->0,正解是dfs+线段树查询,还挺简单的,自己始终卡在一个地方:(id+1)>>1不能写成(id|1)>>1,原先线段树这么写是因为乘过2后必然是偶数,加1就相当于或1,但这里的+1就不能这么写,卡了俩小时,,,,
2024/9/22
link:https://www.gxyzoj.com/d/hzoj/contest/66b0c7117509073c6b151321/problems
表示自己大部分时间都去搞T2样例了,导致T1的50分没整出来。本来T1写的16pts的
T1是线段树,其实考场上想的错误的优化是能延伸到正解的。预处理
T2,考场上不知道推了多久才推出来样例,发现是贪心后狂写。喜提64pts,考后,把中间找到合法区间起始点的循环改成一层,开个 long long 就过了。然后又试了试,把考场交的第一版代码开个 long long 也过了,就是说你一定要相信波波的数据qwq
感觉T3还是挺抽象的,但看完Dyc的题解后好像好懂了一些,结合着luogu题解勉强看懂,挺巧妙的
2024/9/28
link:https://www.gxyzoj.com/d/hzoj/contest/66f746c1f8a2945801c53a36
改完T2精神状态极差,我考场上为什么还自信的认为我A了?
T1,考场上第一次推出dp式子!但我用在线编译发现,它好像会RE,然后就把数组开到1000,就只剩40了。考后把自己定义的dp数组拆成两个就不会RE了(本质上应该是滚动数组优化),然后就A了。
T2,大型分讨现场。考场上自信满满地打了一个半小时,一行一行地对大样例,一点一点改,加各种特判,本来觉得应该没问题了,结果0。发现大样例最后一个多数出了一个数,改后就是40了。自己再改了改,到55就上不去了。然后看dyc的代码,发现自己应该把特判的内容写到填数的过程里,写了写,到70,70 70 70 一直都是70,死活上不去了,最后 User output longer than standard answer.
最后发现没有判断没有删除的情况,加上终于A了,真服了(很抱歉自己写得像个流水账
2024/10/2
link:https://www.gxyzoj.com/d/hzoj/contest/66e55d2ef8a2945801ba51a6
自闭了。牙疼。想去打J。不是很想写总结。
2024/10/3
link:https://www.gxyzoj.com/d/hzoj/contest/66fd3b02f8a2945801ca8d1e
还是来写了。
T1,不会用fc,一个一个调大样例,感觉眼睛要废掉了,z[i]=0依然没有写出来,才发现n的长度为1000。
T2,60%的数据很可做,写了个记搜后一直调不出来,调了1小时,果然似了。下考后把传送门的入口和出口换了一下,就60了,发现自己用的是填表法却写成了刷表法,zz极了。
T3,Solution:
容易发现这是一个与斜率有关的题目,这种题目通常通过维护凸包,或者李超树维护
跨过的区间容易转化为:以 为右端点的最优+以 为左端点的最优
两个问题同理,以右端点为例
设,
最优即
即,离线之后李超树维护直线即可
时间复杂度为,常数略大,空间复杂度为
看不懂,去学李超树。
2024/10/4
link:https://www.gxyzoj.com/d/hzoj/contest/66ae19497509073c6b126cb8
有没有人能讲讲考试数组应该开多大啊?开小RE
,开大还RE
对不起,又鸽了一天。
2024/10/6
link:https://www.gxyzoj.com/d/hzoj/contest/66ffed01f3395ed072efb1db
国庆假期没写多少总结。自愧++
现在打模拟赛很少去想正解了,每个题开题5分钟就去打暴力,非常节省时间,且性价比很高,有时候甚至打着打着暴力就想出了正解(当然这个题肯定是很水的),也很方便写对拍。
挂分:T2数组开小了,写的是
T1非常煎蛋。考虑容斥,把问题转化为
T2,一看数据就是状压,状态枚举,暴力加边,判断是否连通即可获得40pts,但我数组开小了,复杂度是
点击查看代码
cin>>n; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { int x; cin>>x; if(x) e[1<<i-1]|=1<<j-1;//出边 } } e[0]=(1<<n)-1; for(int i=1;i<(1<<n);i++) { e[i]=e[i^lowbit(i)]&e[lowbit(i)];//并集 } for(int i=1;i<(1<<n);i++) { if(flag[i]) { for(int j=e[i];j;j=(j-1)&e[i])//枚举子集(一个很常用的方法) { flag[i|j]=false; } } } ans=0; for(int i=0;i<(1<<n);i++) { ans+=flag[i]; } cout<<ans<<endl;
T3,糖。
T4跟以前树剖里的染色几乎一模一样,维护方式都是相同的,树剖区间求和也可以参考一下。改题时这道题直接三发入魂,不到10分钟就AC了,rp神秘定律
P.S.月考寄中寄(想当年
疯狂颓颓颓,看游记,背图论板。
2024/10/20
又是爆炸的几天,分数永远比考场上估的低,根据我长达三个月的观察后,发现自己挂分主要集中在以下几点:
-
眼瞎。不用解释了,比如看错输出顺序,看错题目条件等等,解决方案:每个题读三遍,包括但不限于题面上的所有字。
-
数组开大/开小。比如开了个85^4的数组。解决方案:
-
漏判/少判边界条件。常出现在dfs或bfs中。解决方案:
对自己重拳出击,认认真真检查代码,尤其是判断当前坐标加上/减去某些值的时候是否越界。 -
考虑不全面。其实跟上面的差不多。不全面因素主要有:计算方案数时一定要注意是否合法。
-
数组/变量打反。解决方案:一定要在头脑清醒的时候打代码!!!
回归正题。今天又挂了。
T1,考场上写的57pts的做法,但是炸成35,原因就是边界条件没判全。发现自己的逻辑思维和其他人很不一样,大家都是枚举这个可以反转的范围,只有我枚举的是每次向左减几或向右加几,也导致我看正解困难了许多,所以我卡常卡过了。题解思路还是很好懂的,定义一个 nxt 数组(链表),记录着每次+2时下一个到哪里,不断往后移,因为有可能重复,所以这相当于一个剪枝。
T2, 只写了3分,还因为没判0挂了。不知道考场上自己为啥不打dfs的14分,好像直接忽略了,真服了
2024/10/21
又应验了上面写的眼瞎,T2没判-1。。。
T1是我考场上开的最后一道题随便打了打暴力,发现自己的搜索连 2 3
都跑不出来,直接 abandon 了。正解吧,代码是简单的,思路是奇妙的,主打这就是一个分类讨论。给的部分分还挺能启发的
T2是我开的第一道题。花了0.5h奋力打50pts的暴力(实际上是40pts),检查了好几遍代码,觉得肯定没问题了吧,啊,然后就0了。然后板有问题。
2024/10/22
最抽象的一集。
T1签到题,本来要打部分分的,后来推了推发现直接排序输出就完了(瞬间找回了自信),开了个vector存储、删除,觉得写起来挺简单的。大样例对了一些就扔了不管了。觉得肯定能A吧。然后考完看排行榜,哇塞,T1怎么爆炸了啊啊啊,咋能TLE呢。然后一问发现vetor删除操作复杂度是 O(n) 的,那我用vector图啥啊。原地裂开。
T2发现只会搜,那就搜吧,写了写,过了第一个样例,第二个样例死活过不去,然后就卡着了,特殊性质随便蒙了个上去,结果显然0分。正解是本质不同子序列计数问题,bitset开个1e5*2e4的dp数组,dp[i][j]表示长度为i,末尾为j的个数。前缀和优化即可。至于%2,因为不是质数,直接判断组合数奇偶性,位运算转移。然后自己是真的啥也想不出来啊。
转移是简单的 优化是 easy 的
T3是我考场上最失败的一道题,我花了1.5h想暴力、打暴力,看到ABCD这么多性质肯定有会写的,6e3那就想想 O(n^2) 的暴力呗。仔细读题(第一遍读错了)发现好像没那么好写,算了先写再说,结果发现第二个样例过不去,仔细分析了一下,发现好像只会 O(n^3) 的5分暴力。又裂开了啊。然后就只剩5分了,写了100多行,啊。然后波波发的std700行代码。鉴定为不可做题。
T4因为只剩半小时多一些了,赶紧写搜,结果没调完。正解也挺抽象,想弃了。
达成成就:4天模拟赛挂176pts(奠定了s挂100的感情基调)
2024/11/24
link:https://www.gxyzoj.com/d/hzoj/contest/6741cff636620b92bbb48958
整整一个月没有打模拟赛了。
考完csp感觉整个人都不一样了,被流放到2机房了。好啊!这真的太适合我了。
T1一眼搜。但因为脑抽给dfs多加了一层循环+continue错(纯纯纸张)挂掉70pts。
T2也很一眼。但因为我dp思维定式硬要两层循环跑完dp,实际上只需简单的优化即可减掉一层,不对,其实应该是dp定义的不好。dp[i]应该是包括i这一位的前后最大值,然后两边计算取min即可。就是说自己脑子始终转不过去那道弯。*
T3其实是一眼。考场上只要我自己再去看一眼那个dfs就行了啊。还有儿子的map,考场上都想到了。可能是因为去一层次考了一个暑假导致现在无法辨别是不是煎蛋题。多考考应该就适应了。
T4并不一眼。但其实很好理解的。相当于把这一串数每隔k个分一段,然后分成两边处理。vector开个f和g数组。f[i][j]表示第i位到分界点,容量为j的最大值,g[i][j]表示分界点到i,容量为j的最大值。然后显然就有一个柿子是max(f[i][j], g[i+K-1][W-j])(枚举j为容量)表示这个区间的最大值。注意细节。
2024/12/15
link:https://www.gxyzoj.com/d/hzoj/contest/67556a5cb96062fe8cd66e7d
可以说是这么久来挂分最少的一场了。(wsq大佬太强了%%%)
由于T1一开始放的原所以临时换题导致我先从T2开的。然后T1一看是期望直接弃了(这是我整场考试最失误的一点),最后一个小时才看的T1结果50pts就打挂了。你别说,前30分拿到了T1后面就真的不难了。
首先这个题就是要想到一遍dfs如何处理出以一个点为根的情况及答案,很容易发现其实每一个点最终的总共情况数 就是以这个点为根的叶子结点数size,然而每一个 在以1为根的树中 不是叶子节点的节点 的 size 值其实就是 size[1],叶子节点的即为 size[1]-1,所以我们的目标就变为求每一个点的所有情况和,因为一遍dfs就可以求出根节点1的相关答案,所以就是一个简单的换根了。这个换根dp需要注意的一点就是要将叶节点和非叶节点分开讨论,因为毕竟以他们为根的叶节点数不同么。
浅浅的放一下转移吧:
void dfs1(int u,int fa) { for(int i=head[u];i;i=edge[i].next) { int v=edge[i].to; if(v==fa) continue; if(f[v]) { dp[v]=dp[u]+(size[rt]-2)*a[v]-a[u]; } else { dp[v]=dp[u]+(size[rt]-size[v])*a[v]-size[v]*a[u]; } dfs1(v, u); } }
T2吧,看出了trie树上建反串并找出了dp转移的两种状态。但是我的dp只能使最后的序列单调上升,按理来说这个样子也是可以的:
,所以自己就没有考虑到这种情况,挂的比较惨烈。
大致就是dp维护当前点到叶节点的最长距离,然后答案就是最长距离+次长距离+儿子数-2取max即可。
T3,我他妈看了3个天才看懂,因为每次就是不理解题解里说的一段话,最后终于懂了,豁然开朗了,但没时间改了,浪费了好多时间啊啊啊
T4 呵呵呵,我花了几个晚上,写了6个dfs(其实也可以并到一起写的)然后不停地hack+调过了,因为这个题其实就是一个分类讨论,只有三种情况:
然后根据这些图推推答案,dfs处理即可。
2024/12/29
状压dp专题我就刷了4道(还有两道不是状压),可以说是没啥长进,然后硬着头皮打得模拟赛。
T1当时写了个dijkstra跑最长路,其实dp啥的我都写好了,转移方程也没啥问题,但dp状态设计时我少了一维:当前节点。挺搞笑的,但也深刻体现出我dp经验还是太少了,考场上发现这个转移会有重复的急死了,下考后瞬间醒了。还有一点是转移的时候应该注意当前合不合法(是不是从0开始的),也没啥难度啊,但就是有些细节没想到啊。
T2也不难啊,很像以前的状压板题,但自己根本没有往正解想,直接写了暴力,dp[i][j][k]表示当前第i行,状态为j,第i-1行状态为k,转移时显然再枚举下i-2行的状态,加上代价取min即可,个数跟着一块转移就好了。注意判断是否合法这样写:(j|k|l|(k<<1)|(k>>1))&tot==tot
(j k l分别是i i-1 i-2行的状态,tot为 (1<<m)-1)。
T3已经快不记得什么了,三维的状压,dp[x][y][t][s]表示在t时刻,当前在 (x,y) 这一坐标,搬走的西瓜状态为 s 的最少移动次数。mp数组辅助转移,mp[x][y][s]表示在t时刻,当前在 (x,y) 这一坐标的西瓜状态。
点击查看代码
#include<bits/stdc++.h> #define int long long using namespace std; const int maxn=105; int h, w, T, sx, sy, n, m, mp[10][10][maxn], dp[6][6][maxn][(1<<10)+5], idx; int dx[5]={0, 0, 0, 1, -1}, dy[5]={0, 1, -1, 0, 0}, ans=-1; struct node{ pair<int,int> id; int tim, s, val; bool operator<(const node &x) const { return x.val<val; } }; signed main() { cin>>h>>w>>T>>sx>>sy; cin>>n>>m; for(int i=1;i<=n;i++) { int t1, t2, opt; cin>>t1>>t2; cin>>opt; int tmp; if(opt==0) tmp=-1; else tmp=1<<idx, idx++; for(int j=t1;j<t2;j++) { int x, y; cin>>x>>y; mp[x][y][j]|=tmp; } } if(!~mp[sx][sy][1]) { cout<<-1; return 0; } memset(dp, -1, sizeof(dp)); dp[sx][sy][1][mp[sx][sy][1]]=0; priority_queue<node> q; q.push(node{make_pair(sx, sy), 1, mp[sx][sy][1], 0}); while(q.size()) { int x=q.top().id.first, y=q.top().id.second, tim=q.top().tim, s=q.top().s; q.pop(); if(tim==T) { if(s==(1<<m)-1) { ans=dp[x][y][tim][s]; break; } continue; } for(int i=0;i<5;i++) { int tx=x+dx[i], ty=y+dy[i]; int ss=s|mp[tx][ty][tim+1]; if(tx==0||tx>h||ty==0||ty>w||!~mp[tx][ty][tim+1]||~dp[tx][ty][tim+1][ss]) continue; dp[tx][ty][tim+1][ss]=dp[x][y][tim][s]+(abs(dx[i])|abs(dy[i])); q.push(node{make_pair(tx, ty), tim+1, ss, dp[tx][ty][tim+1][ss]}); } } cout<<ans; return 0; }
2024/2/11
今天幸运了一波,不知道为啥大家T1都挂了好多,然后没有垫底,感觉T1想想线段树方面的优化就可以做出来了(前提是各种细节没有打挂),T2看样子也只会30pts的暴力分,T3不会代码实现,T4爆搜加点优化应该是能拿到24pts/36pts的。
T1显然O(n^2)做法非常简单,就是变种LIS,
T2数论题,但这个题技巧性不是很多,就是推推狮子,找找规律,计算的时候分类讨论清楚就行了。但让我再做一遍我可能还是不会
T4爆搜题。
“我已经在改变了。请相信我。”
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效