初征——NOIP2018游记
前言
从最初接触oi到今年noip到来,也已经将近有一年了。从对于程序一窍不懂到现在开始学习算法,只是短短的不到一年的时间罢了。这次noip,不仅仅是我oi生涯的第一次noip,更是相当于是对我这一年的努力的一个检验。希望这次能取得一个好的成绩吧。
背景
初一时参加了南海区区赛,结果发挥失常,只有三等奖,痛心疾首,遂定下noip2018一等奖的目标。
初赛
不知道为什么前一天晚上睡眠质量极其差,基本上每个小时我是有醒来的时候,到了四点多我干脆不睡了。去厕所复习了《红星照耀中国》。
考场就在本校,所以直接呆在学校复习。
学校饭堂早餐是方便面(差评)。吃完后就去机房复习。
中午去饭堂吃饭,饭堂大叔很亲切地给每个同学打了四份菜,很饱。说实话挺感谢这位大叔的,可以看出来他是真心地祝福我们取得好成绩。
饭后休息了一会就去考场准备了。
14:30准时发试题,初赛就正式开始了。
选择题略难,感觉比去年难,考场上目测错五题左右。
问题求解和阅读程序求解很水,很快就切完了,细心一点就能拿满分。
完善程序第二题双向链表程序感觉很难,但是空全部都可以根据对称性蒙对……
剩下时间都在刚不确定的题目,最后也没什么进展。
16:30,考试结束。
考后和同学一起对答案,发现选择题有一道智障水题粗心多错了,完善程序第一题把下标当数组用了……心态爆炸,不要脸地大呼没有90pts要凉。
晚上出参考答案了,忘了自己写的答案,估分77~83pts。
几天后初赛成绩出来了。
比估分高,87pts,估计是蒙对的比预想的要多一些。
后来了解到gd分数线是60出头,没想到比去年高这么多。
当然,今年初赛的分数线比去年高应该是因为完善程序可以蒙,如果留空留得刁钻一些,可能分数线会低很多。
总而言之,今年的初赛对我来说还算是有惊无险的了。接下来就要期待我复赛的表现了。
复赛
最后一周开始全力复习,文化课都没怎么管,这几天作业没全部完成过。(还好班主任没发现)
然而复习成果貌似不怎么样。
无论如何,复赛马上就要来了,就算没复习好也要硬着头皮上。
复赛前一天晚上也是住校,学校要求直接睡别人的宿舍……
凌晨三点被蚊子吵醒,打了两个小时的蚊子,到了五点多因为劳累过度而再次睡着。
真是愉快的一夜呢。
根本没睡多久所以今天一整天都没什么精神。
饭堂早餐还是方便面。大概七点就回到机房复习了。
考前几小时看完了ac过的题后,写了几个模板,然后就上大巴出发了。
在大巴上看《算法竞赛进阶指南》,dp部分实在看不懂(我太弱啦),只好认真看搜索,特别是剪枝部分。
没过多久,就来到了广州二中。
第一次来到这所学校,大感为什么和我校差距这么大……
广州二中伙食还不错,吃的很饱。
考前紧张到发抖,一直以喝水来压惊……
两点多钟到了试室,刚开始充满激情,结果被突如其来尿意憋没了(谁叫你之前喝那么多水)。
两点二十多分进入试室,监考员早早地写上了密码,看完后去上了厕所,发现这层楼好像只有一个男厕???
14:30准时开考,然后可能我这一年oi生涯里最惊心动魄的三个半小时就到来了。
开考后打开题目花了近五分钟。下意识点开c盘里找,一直都找不到比赛文件,最后还是用全局搜索查找文件名,才发现东西都在d盘里,解压密码输了三次才对,导致开考后五分钟我才拿到试题……
按照ccf得难度分布惯例,我打算t1t2做一题看一题,做完后看一遍t3t4再决定做哪一题。
可惜今年ccf,貌似并不按常规出牌。
t1一如既往的水,getline再遍历一遍输出即可。切掉后检查了很久,差不多10min才过掉这题。
#include <iostream> #include <fstream> #include <string> using namespace std; string s; int ans; int main() { freopen("title.in", "r", stdin); freopen("title.out", "w", stdout); getline(cin, s); ; i < s.size(); ++i) { ') ++ans; else if(s[i] >= 'A' && s[i] <= 'Z') ++ans; else if(s[i] >= 'a' && s[i] <= 'z') ++ans; } cout << ans; ; }
我的程序
t2大模拟,不过要注意一下精度问题以及分类讨论求解,还是考细心为主。
题目有点长,尽管全部分析完再写,也是边写边改(还是我太弱了)。大概写了20min然后测样例,没过,继续改,还是没过。最后改了快到15:20才改好,反复检查后就放心地去做剩下两题。
#include <iostream> #include <fstream> #include <cstdio> #define MAX_N 100001 using namespace std; int n, m; long long a[MAX_N]; long long sum1, sum2; int p1, p2; long long s1, s2; long long d; inline ? x : -x;} int main() { freopen("fight.in", "r", stdin); freopen("fight.out", "w", stdout); scanf("%d", &n); ; i <= n; ++i) { scanf("%lld", &a[i]); } scanf("%d%d%lld%lld", &m, &p1, &s1, &s2); a[p1] += s1; ; i < m; ++i) { sum1 += a[i] * (m - i); } ; i <= n; ++i) { sum2 += a[i] * (i - m); } p2 = m; d = abs(sum1 - sum2); ; i < m; ++i) { if(abs(sum1 + s2 * (m - i) - sum2) < d) { p2 = i; d = abs(sum1 + s2 * (m - i) - sum2); } else if(abs(sum1 + s2 * (m - i) - sum2) == d && i < p2) { p2 = i; } } ; i <= n; ++i) { if(abs(sum1 - sum2 - s2 * (i - m)) < d) { p2 = i; d = abs(sum1 - sum2 - s2 * (i - m)); } else if(abs(sum1 - sum2 - s2 * (i - m)) == d && i < p2) { p2 = i; } } printf("%d", p2); ; }
我的程序
感觉这次在前面两题花的时间有点长了,按照这个题目难度其实三点前就能切完。我切水题的能力还是有待提高。
看完后面两题题面之后,最先想到的就是t3用dp,t4除了暴搜+剪枝以外,没有任何思路,于是决定先做t3。(其实我应该先做t4才对,不知道当时脑子怎么就抽了)
t3方程不好想,本来刚开始想到解法,写了30min,突然想到反例,自己hack了自己,只好全部删掉。想了半天正解无果,就打算换思路骗分,写一个能拿50pts的dp。
写完之后又去乱搞优化,结果不知道是什么问题,各种莫名错误出现。一行一行代码注释去测哪里出错,还是测不出来,只能自己乱改。(其实我应该推掉重写才对)
在改的过程中,下意识看了表,发现现在都已经是16:49了!无法,只好先放弃肛这一题。
打算上厕所去放松心情,结果这层厕所又被人占了?当时就是不知道可以跨楼层上厕所,只好憋着继续考。
虽然上不了厕所,但我还是在门口外面想了一会t4,只想到暴力做法,就回试室去实现了。
花了30min去写t4的暴搜和小部分剪枝,其他剪枝因为时间问题来不及加,草草调试了一遍,看到过了两个小样例后随便测了大样例,也没认真看用时,没记错的话好像用了5s多……(可能真是我记错了)
#include <iostream> #include <fstream> #include <cstdio> #define MAX_N 1000001 using namespace std; int n; struct Node { int val; int lt, rt; int num; // 以这个点为根的树的节点数量 }a[MAX_N]; ; void Get_Num(int x) { a[x].num = ; && a[x].rt == -) return; && !a[a[x].lt].num) { Get_Num(a[x].lt); a[x].num += a[a[x].lt].num; } && !a[a[x].rt].num) { Get_Num(a[x].rt); a[x].num += a[a[x].rt].num; } return; } bool DFS(int x, int y) { if(a[x].val != a[y].val) return false; if(a[x].num != a[y].num) return false; && a[y].num == ) return true; && a[x].rt != - && a[y].lt != - && a[y].rt != -) { if(!DFS(a[x].lt, a[y].rt)) return false; if(!DFS(a[x].rt, a[y].lt)) return false; return true; } && a[x].rt == - && a[y].lt == - && a[y].rt != -) { if(!DFS(a[x].lt, a[y].rt)) return false; return true; } && a[x].rt != - && a[y].lt != - && a[y].rt == -) { if(!DFS(a[x].rt, a[y].lt)) return false; return true; } return false; } int main() { freopen("tree.in", "r", stdin); freopen("tree.out", "w", stdout); scanf("%d", &n); , ; ; i <= n; ++i) { scanf("%d", &a[i].val); } ; i <= n; ++i) { scanf("%d%d", &a[i].lt, &a[i].rt); } Get_Num(); ; i <= n; ++i) { || a[i].rt == -) continue; if(DFS(a[i].lt, a[i].rt)) ans = max(ans, a[i].num); } printf("%d", ans); ; }
我的程序
回头做t3,那个时候是17:42。遗憾的是,直到考试结束还是找不到t3程序莫名re的原因在哪,来不及重构代码了,只好把这个八成会爆0的代码交上去。
看了看窗外的黄昏,这景色就和自己的心境一样,整个人都更崩溃了。
最后10min,监考老师提醒,才发现有考生注意事项的文件,估计是开考的时候太急没看到。本来想问程序存到哪里,才发现是要放到d盘(汗)。
花了几分钟去检查文件名和测能否编译。搞完后只剩最后半分钟,平复了一下心情,估了一下分,感觉要凉,心态更炸了。
18:00,比赛结束。
出了试室和同学互探考得怎么样,跟同学说了我t3的情况,越说越觉得遗憾,最后还是不想说下去了。
上了返程的大巴,全程都有人在讨论t3,貌似有人想到正解了??
t3莫名错误搞得我很不是滋味,就因为它,这次我能否拿一等还是很悬。
考后自己估分,应该是100+100+0+(0~40)。只能坐等ccf出成绩了。
这次考不好的原因,当然还是我的实力不够强,特别是dp需要加强;其次搜索和贪心的话,因为骗分肯定会用到,所以也需要再去提高;还有最近新学的知识需要巩固的。
尽管t3错误异常,但如果我水平足够的话,其实是应该能找出缘由的,实在不行我也可以重写。这也提现了我考场策略也不怎么好。
至于考场策略不好,都是因为我的参赛经验不足。我的时间把控很不到位,前面三题花了太多时间(尤其是t3),导致t4根本没什么时间去想。我的其他方面的一些技巧也都需要去加强。
总的来讲,这次noip很好地诠释了一句话:技不如人,甘拜下风。
无论这次成功与否,该考完的已经考完了。
就这样吧。
考后第二天早上起来去洛谷自测,只交了三题,没交t3,结果全ac了,这数据太水了吧……
休息了一天再来想昨天的比赛,感觉心情好了很多。oi生涯中的第一次noip终于过去了。如果高中继续学下去的话,那也是只有四年的时间打oi了。进了竞赛这个圈子,收获了很多东西,在无数dalao面前,更加能感受到自己的渺小(弱)。在那么多从小学oi的人面前,我是毫无优势。若达到他们的高度,我还有非常多需要学习。
这次我是带着挑战ak虐场的心态来参加的,t3的dp狠狠打击了我,t4据说正解是manacher或hash,这我也根本不会。这次noip是深刻地让我意识到了我距离akpj还有多大差距。
本来打算考完这次,明年就去打tg。考成这样,明年直接参加tg估计是不可能的,应该还得继续打一年pj,希望明年能够如愿以偿。
过了几天后,ccf才公布选手程序了。
后来断断续续测了几个数据。
洛谷:100+100+10+100
学军:100+100+10+100
牛客:100+100+10+100
某大佬出的数据:100+100+35+80
本来测完前三个之后,自我感觉已经好了很多了,还真的开始有想着ccf的数据跟这上面的一样水的念头。结果在某大佬的数据下,t4re了五个点,感觉这样下去官方数据可能会re更多!现在我又慌了起来。
出成绩那天,中午没吃饭,赶着去机房查成绩,结果ccf咕了?害得我一天心情都不怎么好。
下午上电脑课,发现ccf改为明天出成绩……
第二天上午被老师叫出去,果然是ccf出成绩了。
rp爆炸,t4居然ac了,总共是100+100+5+100 = 305,在gd里也算是前几十名,应该是有一等奖了。
如果要把这次的题目放在洛谷上的话,个人认为难度如下:
标题统计:红题(不解释)。
龙虎斗:橙题(只不过是细节需要注意罢了)。
摆渡车:蓝题(这dp真的好难QAQ)。
对称二叉树:绿题(数据太水,就是剪枝水题)。
(话说我考前看剪枝,结果t4真用到了剪枝,怕不是要被禁赛)
又过了很多天,ccf公布了奖项。
得知了自己拿了一等奖,虽然这已经是不出所料的了。gd省一线215pts,有点水了。
再回想这次noip,虽然对于我的真实水平来说,这次成绩是有点差了,但毕竟还是有一等奖而且是300+,遗憾也没有那么大了。
无论如何,noip2018已经结束了,让我们noip2019再见!
初征——NOIP2018游记的更多相关文章
- Bittersweet——NOIP2018 游记
p { font-size: 16px; line-height: 1.5em; } blockquote { font-family: 'Times New Roman', 楷体; text-ali ...
- NOIP2018游记(退役记。)
Noip2018游记 这可能是写的最后一篇博客? \(Day0\) 早上六点从学校出发? 早上有雾,在车上扯淡,睡觉. 莫名其妙到了中午,想着午饭怎么解决,后来才知道早上发的四个面包竟然就包括我的午饭 ...
- 前行记录 - NOIP2018游记
NOIP2018游记 - 前行记录 NOIP2018 完跪……滚回学校考半期 QwQ 这篇不是题解 awa ,题解之后会发布的,毕竟我还没有AC呢 又及……G2020 陌路笙歌 - 再见(╯▽╰) 感 ...
- 一直没有敢发的NOIP2018游记
一直没有敢发的NOIP2018游记 NOIP2018游记 教练说知足是最好的,尽吾志而也不能及者,可以无悔矣.在这次考试中的表现令我还是十分满意的.(笑) D1 T0 我配置背得感觉很好,我考场上直接 ...
- NOIP2018游记 & 退役记
NOIP2018游记 & 退役记 我是一名来自湖北武汉华中师大一附中的高二\(OIer\),学习\(OI\)一年,今年去参加\(NOIP\),然后退役.这是一篇\(NOIP2018\)的游记, ...
- NOIP2018 游记 QAQ
写在前面: 本人初三党.NOIP前两个月不好好停课搞信竞愣是要搞文化课.于是,期中考与NOIP一起凉凉[微笑] 本人写的第一篇NOIP游记,各位大佬们随便看一看就好 Day -n 初赛71,竟然跟wx ...
- 【比赛游记】NOIP2018游记
往期回顾:[比赛游记]NOIP2017游记 转眼间又过去了一年,当年还是初中生的我已经摇身一变成为了AHSOFNU的高一学生. 回顾这一年我好像也没学什么新东西,要说有用的可能就无旋Treap吧,不知 ...
- NOIP2018游记-退役之战
\(Day\ 0\) 从火车站下来坐地铁\(1\)小时,再乘公交车到酒店,还要帮队里一个断腿大佬搬东西,累死我了.. 到酒店就快\(5\)点了,想打个牌也没时间. 酒店的房间很不错,空间大又干净,后来 ...
- Noip2018游记——AFO
本来Day 0和Day 1写得挺轻松的,结果没想到Day 2是这样的画风...心情逐渐沉重... Day 0 白天的时候颓的一批,上午考的信心赛还打错了一个字母然后$100pts\rightarrow ...
随机推荐
- C++之语言概述
C++语言是广泛使用的程序设计语言之一,因其特有的优势在计算机应用领域占有重要一席. C语言的发展 20世纪70年代初,贝尔实验室的Dennis Richie 等人在B语言基础上开发出C语言,最初是作 ...
- day79
昨日回顾 昨日回顾: cookie: -是什么?存储在客户端浏览器上的键值对 -干啥用的?记录状态 -django中使用: -设置值: -HttpResponse对象,obj.set_cookie(k ...
- day13,day14
day13 迭代器 什么是迭代器? 迭代:是一个重复的过程,每一次重复,都是基于上一次的结果而进行的 器:迭代取值的工具 为何要用迭代器? 迭代器提供了一种通用的不依赖于索引的迭代取值方式 如何用迭代 ...
- 第13章 GPIO—位带操作
第13章 GPIO—位带操作 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...
- Metasploit简单应用
什么是Metasploit Metasploit是一款开源的安全漏洞检测工具. 它可以帮助用户识别安全问题,验证漏洞的缓解措施,并对某些软件进行安全性评估,提供真正的安全风险情报.当我们第一次接触Me ...
- 20155237方自晨 实验四android开发基础
提交点一 Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)>第二十四章: 安装 A ...
- 20155320《网络对抗》Exp4 恶意代码分析
20155320<网络对抗>Exp4 恶意代码分析 [系统运行监控] 使用schtasks指令监控系统运行 首先在C盘目录下建立一个netstatlog.bat文件(由于是系统盘,所以从别 ...
- cmake源码包安装后的卸载问题
cmake源码包安装 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程),具体学习请移步官网CMake 本文介绍的就是用cmake去安装的别人的包. 一般流程: ...
- JSON传输数组的基本操作
目标JSON结果如下: 生成JSON的的过程如下: Document document; Document::AllocatorType& allocator = document.GetAl ...
- PostgreSQL同步方案
Windows下Postgre SQL数据库通过Slony-I实现数据库双机同步备份 - 数据库其他综合 - 红黑联盟 postgresql同步流复制的Hot Standby - CSDN博客 使 ...