前言

从最初接触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游记的更多相关文章

  1. Bittersweet——NOIP2018 游记

    p { font-size: 16px; line-height: 1.5em; } blockquote { font-family: 'Times New Roman', 楷体; text-ali ...

  2. NOIP2018游记(退役记。)

    Noip2018游记 这可能是写的最后一篇博客? \(Day0\) 早上六点从学校出发? 早上有雾,在车上扯淡,睡觉. 莫名其妙到了中午,想着午饭怎么解决,后来才知道早上发的四个面包竟然就包括我的午饭 ...

  3. 前行记录 - NOIP2018游记

    NOIP2018游记 - 前行记录 NOIP2018 完跪……滚回学校考半期 QwQ 这篇不是题解 awa ,题解之后会发布的,毕竟我还没有AC呢 又及……G2020 陌路笙歌 - 再见(╯▽╰) 感 ...

  4. 一直没有敢发的NOIP2018游记

    一直没有敢发的NOIP2018游记 NOIP2018游记 教练说知足是最好的,尽吾志而也不能及者,可以无悔矣.在这次考试中的表现令我还是十分满意的.(笑) D1 T0 我配置背得感觉很好,我考场上直接 ...

  5. NOIP2018游记 & 退役记

    NOIP2018游记 & 退役记 我是一名来自湖北武汉华中师大一附中的高二\(OIer\),学习\(OI\)一年,今年去参加\(NOIP\),然后退役.这是一篇\(NOIP2018\)的游记, ...

  6. NOIP2018 游记 QAQ

    写在前面: 本人初三党.NOIP前两个月不好好停课搞信竞愣是要搞文化课.于是,期中考与NOIP一起凉凉[微笑] 本人写的第一篇NOIP游记,各位大佬们随便看一看就好 Day -n 初赛71,竟然跟wx ...

  7. 【比赛游记】NOIP2018游记

    往期回顾:[比赛游记]NOIP2017游记 转眼间又过去了一年,当年还是初中生的我已经摇身一变成为了AHSOFNU的高一学生. 回顾这一年我好像也没学什么新东西,要说有用的可能就无旋Treap吧,不知 ...

  8. NOIP2018游记-退役之战

    \(Day\ 0\) 从火车站下来坐地铁\(1\)小时,再乘公交车到酒店,还要帮队里一个断腿大佬搬东西,累死我了.. 到酒店就快\(5\)点了,想打个牌也没时间. 酒店的房间很不错,空间大又干净,后来 ...

  9. Noip2018游记——AFO

    本来Day 0和Day 1写得挺轻松的,结果没想到Day 2是这样的画风...心情逐渐沉重... Day 0 白天的时候颓的一批,上午考的信心赛还打错了一个字母然后$100pts\rightarrow ...

随机推荐

  1. C++之语言概述

    C++语言是广泛使用的程序设计语言之一,因其特有的优势在计算机应用领域占有重要一席. C语言的发展 20世纪70年代初,贝尔实验室的Dennis Richie 等人在B语言基础上开发出C语言,最初是作 ...

  2. day79

    昨日回顾 昨日回顾: cookie: -是什么?存储在客户端浏览器上的键值对 -干啥用的?记录状态 -django中使用: -设置值: -HttpResponse对象,obj.set_cookie(k ...

  3. day13,day14

    day13 迭代器 什么是迭代器? 迭代:是一个重复的过程,每一次重复,都是基于上一次的结果而进行的 器:迭代取值的工具 为何要用迭代器? 迭代器提供了一种通用的不依赖于索引的迭代取值方式 如何用迭代 ...

  4. 第13章 GPIO—位带操作

    第13章     GPIO—位带操作 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...

  5. Metasploit简单应用

    什么是Metasploit Metasploit是一款开源的安全漏洞检测工具. 它可以帮助用户识别安全问题,验证漏洞的缓解措施,并对某些软件进行安全性评估,提供真正的安全风险情报.当我们第一次接触Me ...

  6. 20155237方自晨 实验四android开发基础

    提交点一 Android Stuidio的安装测试: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)>第二十四章: 安装 A ...

  7. 20155320《网络对抗》Exp4 恶意代码分析

    20155320<网络对抗>Exp4 恶意代码分析 [系统运行监控] 使用schtasks指令监控系统运行 首先在C盘目录下建立一个netstatlog.bat文件(由于是系统盘,所以从别 ...

  8. cmake源码包安装后的卸载问题

    cmake源码包安装 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程),具体学习请移步官网CMake 本文介绍的就是用cmake去安装的别人的包. 一般流程: ...

  9. JSON传输数组的基本操作

    目标JSON结果如下: 生成JSON的的过程如下: Document document; Document::AllocatorType& allocator = document.GetAl ...

  10. PostgreSQL同步方案

    Windows下Postgre SQL数据库通过Slony-I实现数据库双机同步备份 - 数据库其他综合 - 红黑联盟 postgresql同步流复制的Hot Standby - CSDN博客   使 ...