zoukankan      html  css  js  c++  java
  • 一直没有敢发的NOIP2018游记

    一直没有敢发的NOIP2018游记

    NOIP2018游记

    教练说知足是最好的,尽吾志而也不能及者,可以无悔矣。在这次考试中的表现令我还是十分满意的。(笑)

    D1

    T0

    我配置背得感觉很好,我考场上直接默写出来了,没有什么困难。不过那个键盘我要吐槽一下,放在抽屉里面,特别蹩脚。(你感觉,你又说你感觉)

    T1

    这道题是原题,五分钟就写完了。就是一个很傻的贪心。不过当时在机房做做到这道题的时候,第一反应是写了一颗线段树然后贪心,后来仔细想一下,就按照直觉给写了一个几行的贪心,交上去过了。运气正好,但也许就是这一题运气好吧。

    T2

    这道题是我本次NOIP最可惜的一道题,没有之一。考场上我看到这道题,猜了一个结论,也不是猜测,就是证明了一个结论,就是说新的货币系统的组成部分一定是给定货币系统的子集。于是我们sort一遍,然后直接用线性筛素数的办法,看那个数可以直接被比它小的数表达出来就好了,筛一轮就可以出来了。复杂度,而且(nle100 ,mle25000​)写了几分钟就把大样例过了。

    但是,为什么说很可惜呢?

    众所周知,我的代码里总是有这样的代码。

    const int maxn=105;
    const int maxnum=25005;
    

    在线性筛答案的时候,需要一个

    bool in[maxnum];
    

    来记录这个数字是否被筛出来了。显然,如果不加控制,会越界RE,所以:

    sort(data+1,data+n+1);
    for(int t=1;t<=n;t++){
        if(!in[data[t]])
            ans++,in[data[t]]=1,sav.push_back(data[t]);
        for(int i=0;i<sav.size();i++){
            if(data[t]+sav[i]>maxn)//注意这里
                continue;
            if(data[t]+sav[i]>data[n])
                continue;
            if(!in[data[t]+sav[i]])
                sav.push_back(data[t]+sav[i]);
            in[data[t]+sav[i]]=1;
        }
    }
    

    显然可以水过去。

    但是!有没有细心的小伙伴发现,这一行代码有一点问题

    if(data[t]+sav[i]>maxn)
        continue;
    

    回顾我们上面那一行:

    const int maxn=105;
    const int maxnum=25005;
    
    

    原来!!!!

    (其实只需要下面那个对于data[n]的判断就好了)

    想不到连续一个多月的考试,都没有暴露我自己代码风格不够直观的问题。机房的小伙伴老说看不懂我代码,然而我不以为意。想不到在NOIP上翻车了......

    分数太容易拿,也太容易丢了。或许这就是信息学吧。

    九点左右,前两道题就写完了。

    T3

    写了两个特殊性质,可以说很傻。第一个特殊性质输出一个直径,第二个特殊性质写一个贪心。成功写出40分,其实我写了所有情况的一个假DP做法,不过没拿一分。

    D1: (100+100+40=240 ->100+30+40=170),有点烦躁。

    D2

    T0

    什么也没发生。不过心疼坐我右边那个小朋友,他坐我旁边,以为我昨天AK了,很是羡慕..他好像第一天没有150吧...

    T1

    浏览完三道题后,觉得第一题好水,感觉全场能切,先写第一题。第一档我发现就是一个树上贪心,每次把自己所有儿子中最小的那个走了就好了。第二档多一条边,好办。我直接断开一条边就是一个原来的问题了。(O(n^2))

    不过今天的T1没有那么顺利。testdata4老是过不了。调了我接近两个小时,终于过样例了。

    原来是我比对答案的时候出错了,应该在发现有不同时,判断,然后马上break。我一直没发现。还是我字符串不够熟练啊。所以外面混,迟早要还的。(O(n^2))水过去了。

    但是!!!后面测民间数据的时候,我只有88分,最后三个点TLE。我找到原因了,我使用的是链式前向星,所以要sort才能做到不然复杂度就是错的。

    加到数组里面先缓存一下,然后再加到链式前向星里就完事了。

    不过要乐观,下考后,发现大家居然都没想到直接断一条边做,还说这是一颗奇环树。我根本就没想过这个东西(乱搞主义好啊),没想到其实自己也能骚出这样的办法,233

    还剩一个半小时,进入T2 T3。

    T2

    这道题我以为是组合数学......正好之前yyb讲过的矩阵中不同路线数量是,我以为直接这样能做,但是发现并不行。看到数据范围,发现,觉得是一个状压DP,不过想了一下,转移很复杂。时间不够了,我决定跳过T2,去做T3。写了一个输出样例的程序,走了(还得了很多分)。

    T3

    这两天好像都没写DP吧?这个一看是个树上DP啊!设表示在节点,有/无驻扎时,最小花费。的时候很好转移,呢?我直接这样:(dp[i][0]=min(dp[i][1]-min(dp[k][1],dp[k][0])+cost[i])​)

    小样例过了,大样例呢?不行。点开样例,发现不可调试,于是我自己手写了一个样例,发现:

    dp有后效性!

    好吧,好吧,怎么找到一个合适的顺序,使得我可以忽视掉后效性呢?我想啊想,下考了。

    (100+13+24=127->96+13+26​)

    结语

    NOIP2018 : 二等,知足了,毕竟我才学几个月不到呢,但是很遗憾,高一一等奖肯定有很多新的机会,然而我都只能错过了...

    至此,我的NOIP2018就结束了。有惊喜,也有遗憾。惊喜的是,那些我原来觉得不可做的题目,终于可以在我的努力下,扣出一点分。遗憾的是,两道完全会的题目,都没有满分。But life carries on !

    ​ I don't know, where this road leads , but I know where to start. ----Via Martin

    ​ 不知道这条道路会通向何方,但我知道从哪开始。

    ​ Winlere ,16,Dec , noon.

    回顾

    要参加(观)省选的我看到NOIP的我,感觉自己真是naive啊...

    dp有后效性这个东西直接上动态dp就完事了,我当时还很崩溃,不知道怎么办,因为写了太久了QAQ,不过菜菜的我居然能过看出来,也震惊。

    1=都没有的最大原因就是落实不行,其实也不是我不去落实,当时实在是太弱了!其实当时我多问问,缠着随便一个dalao问问分治的原理是什么,甚至找谢总求教分治原理是什么,NOIP也不会怎么差,对于很多算法的真正理解就是那天突然领悟分治的含义,假如这个觉悟放在NOIP之前,可能NOIP的结果也不会这么糟吧。

  • 相关阅读:
    C#调用WinAPI(转)
    C++升级到C#,内存数据读取问题
    锦里未成行
    创业用人九招成功法则
    彩霞满天
    特别提醒: 7种不良习惯直接影响你晋升!
    生意大展示:49种简易创业方法大比拼
    阴阳天
    受益无穷的28条职场语录
    哈佛:创业者需具备的素质及培养方法
  • 原文地址:https://www.cnblogs.com/winlere/p/10652059.html
Copyright © 2011-2022 走看看