2020年csp总结

2020年csp总结

大前言

初三,初中最后一次比赛了,也是 csp-J 的第一次也是最后一次考试。

csp-j

分数

在这里插入图片描述

第一题

比赛时发现不符合的就只有 2 0 2^0 20 这一个,然后如果是奇数就输出 − 1 -1 1,否则就质因数分解就完事了。

赛后说要判断 0 0 0,然后我没有判断,慌得一批。

后来发现数据范围从 1 1 1 开始,然后就 100 100 100 了。
吓死。

第二题

第二题一看到分数的范围只有 600 600 600,就很自然的想到记录每一个分数有多少人,然后对于每一次直接枚举分数线是多少找到分数线。

就是桶排,复杂度 O ( 600 × n ) O(600\times n) O(600×n)

第三题

第三题看到题目:有被吓到谢谢。

然后就开始分析题目,发现输出的答案要么是 1 1 1,要么是 0 0 0
或者说,要么跟不翻转时的答案一样,要么不一样。

然后就想到要看每个值的改变对答案起不起决定性作用。

然后就搞出了在一个运算中,两边要怎么样才会有哪一边翻转对答案有决定性作用。
然后我就发现要让一个函数它在一个式子中起作用,就是要包含他的运算中,它所在的那一边一定都要翻转后对答案有决定性作用。

然后就欢乐模拟了。

第四题

看到是 dp,给历来 dp 较弱的我加了个油,就开始看题了。

首先看到题目,发现可以弄一个 n 3 n^3 n3 的 dp,直接 f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k],表示走到 i i i 列,然后上一行的时候走到了 j j j,这一次走到了 k k k。然后就打了出来。

接着想把中间那一维弄掉,就先看走到这一列的最上面,然后直接上面维护最大值,下面用堆来维护最大值,然后不停的把要走到的点向下移。
(然而这个算法好像有问题)

本来是想分段用不同的算法的(因为我自己看自己的算法后不能保证能对)

结果因为怕 MLE,就只弄了后面想到的算法,然后就欢乐 30 30 30

比赛时

先看题目:
第一题:看清题意之后想到了分解质因数加判断奇偶,然后就过了
第二题:一开始有点蒙,看数据之后发现可以桶排。
第三题:???,什么鬼,然后发现可能是看一个值的翻转是否会对答案产生改变。但是不会分解式子(好吧是觉得很麻烦,不想具体的想),然后就滚去看第四题。
第四题:感觉是 dp,想到可以用 n 3 n^3 n3 来做。

然后先大概 40 40 40 分钟写了前两题,过了样例。

然后就滚去模拟第三题,搞了 20 20 20 分钟成功分开了式子,然后就可以看一个式子中最后一步的运算两边要怎么样,运算要是什么,某一边的值的翻转才会对整个式子产生改变。(又用了 20 20 20 分钟)
然后不知道怎么办,就把每个式子都判断一遍。
然后就觉得一个值翻转要对式子的值产生影响,就是要包含这个值的每一个式子中,把这个值所在的那一边翻转之后,都要对答案产生影响。
然后就去实现,大概打出来加调错,用了半个小时吧。

然后就去搞第四题,先把那个 n 3 n^3 n3 的 dp 搞了出来,然后就开始想优化。(这个大概半个小时)
我的 dp 是枚举列,然后枚举从哪一行到哪一行。然后我就想着能不能不枚举从哪一行来的,直接通过维护得到从哪一行来最优。
然后我就开始上面直接维护最大值,后面用堆维护。(这里大概 30 30 30 分钟)
然后样例都过了,但是我感觉自己的操作很奇怪,就去搞对拍。
结果对拍不熟,忘了打运行生成随机数的程序,自己也不知道,就一直在跑同一组数据。

然后对拍了十分左右,一直都没有问题(一直都是同一组数据怎么可能有问题)
然后我就想着开多几个对拍看看能不能找错误找的快一点。
然后我开第六个的时候,电脑死机。(no 做 no die)
然后就重启,发现要输入账号密码,然后就打算去叫老师。
结果老师被电脑挡着,我以为他不在,干等了半个小时。
然后直到老师的头渐渐的从电脑屏幕那里冒出来,我才发现老师一直都在。
(我可能是 NT)

然后找老师输了账号密码开机之后,程序都在,但是第四题 n 3 n^3 n3 的 dp 没了。
然后因为当时怕 MLE 而且对拍对了那么久都没有问题,我就没管了。

然后剩下的时间就可以疯狂的检查文件名,freopen这些东西。

然后?然后检查了可能有一百遍之后,比赛就结束了。

总结

血亏。

首先,第四题没有想出正解,dp 还是太薄弱了。

第二,NT 的我竟然觉得会 MLE,这就离谱,然后完美的从应有的 370 370 370 掉到了 330 330 330,然后就被一个初二的神仙低了。(sto CXY orz)

第三,第四题本来打了个对拍,结果没有打这一段:
sytem("sjs.exe");(就是没有运行生成随机数的程序)
然后一直都是在拍同一组数据。

但起码有个一等,勉勉强强过得去吧。

在这里插入图片描述

csp-s

分数

在这里插入图片描述

第一题

就是这一题,一分没拿,裂开。

我看到题目,傻傻的直接想着要直接全部用公式,直接 O ( 1 ) O(1) O(1) 算。

然后我这个憨憨打了两个多小时还打不出来。

然后反手一个爆蛋,闷声发大财。

第二题

看了一遍题意,大概觉得是二进制之类的东西。
然后就看每一种粮食买不买,然后用可以搭配出来的全部动物总数减去动物园原有的,就是答案。

然后没有开 unsigned long long,更没有特判超过 unsigned long long 的情况。
然后就 75 75 75 分。
(不过好像我判断数某一位是否为一的位运算也有一些小问题)

第三题

第一题做太久,就没怎么多想,打了个暴力走人。

第四题

又是第一题做太久,在一开始看题的时候想了一会之后,发现如果最大的蛇打完最小的蛇不是倒数,就会再打。

然是代码打着打着又发现有的时候最大的蛇就算打了最小的变成了最小,它也会打,因为第二回因为相同的原因不敢打它。

然后我就果断去调我的第一题了。

比赛时

先看题目:
第一题:公式?? O ( 1 ) O(1) O(1)??但是又觉得麻烦,然后就没多想,抱着对第一题出题人的感激去看下一题。
第二题:发现可以直接弄出有哪些饲料,然后就发现了动物编号有一些位是只能填 0 0 0,然后别的为就可以填 0 0 0 或者 1 1 1,然后自然就想到了二进制。然后就漏看了范围,后面只开了 int。
第三题:非常懵逼,先想了一会最暴力的做法,然后又觉得可以用线段树优化。
第四题:一开始以为只要最大的打了最小的不会是最小的就打,否则就不打。
*你充满了决心

然后先跟第一题肉搏了两个小时,决心逐渐消失。
然后就去打第二题,打了半个钟就搞定了,重新充满了决心。
然后就去弄第四题,发现完全不是我想的那么简单,还要看如果最大的打了最小的变成最小的,新的最大会不会打他。然后成功被绕晕。
*你的决心碎了一地
然后骗了第四题的前 20 20 20 分,就继续搞第一题。
搞到最后半个小时,发现第三题的暴力还没有敲,更别说线段树,然后就先火速敲了暴力。斟酌之后就打算继续搞第一题(因为我觉得我不可能在最后十多分钟打一个线段树)
然后又继续搞了半天,调的乱七八糟的,然后比赛就结束了。

总结

提高裂开。

主要是第一题出的问题有点大。

先是总想着直接用公式,就完全没有想过要枚举年数。
想到时间复杂度的想法但是又很复杂(特别是推公式的时候)一定要想一想有没有时间长一点的。

而且考场上用推公式的算法就算打出来了也要分段,把可以暴力的暴力。
(就因为我是个数学菜鸡)

在这里插入图片描述
第二题一般般吧,虽然说可以 A 的因为细节问题没有 A 到,但是起码有分。
不过以后要对数据的大小更加敏感一些,不然就会这样丢分。

第三第四题,相对来说骗到了一点分,但感觉其实第四题如果有时间可以用递归来骗 40 40 40 分,看看能不能水多一点的。

总的总结

这次,一般般吧,没有考的很好,但勉强说得过去。
普及的唯一一次考试,起码上了 300 300 300 吧。
提高虽然拿不到1=,但起码也多了很多骗分和比赛经验。

总的来说,继续努力,下一年加油吧!

猜你喜欢

转载自blog.csdn.net/weixin_43346722/article/details/109827470