Day 1 不想说了,反正就是三个水题,直接来讲Day 2。

Day 2 一上来,T1做法写的丑了点,折腾了一会,大概50min的样子写完了。

T3一眼DDP……这玩意儿我就写过一个模板,还只写过一次。考场上直接来莽风险有点大,又看到这玩意儿部分分还挺多的?就先扔了。

然后就开了这个坑爹的T2。

T2第一眼以为是只要斜行单调就行了,但是仔细分析了一波,发现这样的话,\(3 \ 3\) 的样例就会是 \(2 \times 3 \times 4 \times 3 \times 2 = 144\) ,会错。

仔细想了想,这东西不仅是要斜行单调,有可能两条不同的路径到同一个点的时候,会跑出相同的字典序,然后后面的部分只要能够跑出不同的字典序,就会出问题。

稍微修了一下锅,条件变为

  1. 满足每一个斜行的数字从左下到右上是单调递减的。
  2. 如果对于某个数字,其左边的数和上面的数相同,那么以这个点为左上角,终点为右下角的这个矩形,每个斜行所填的数字强制相同。

直接基于这个东西,强上状压DP的话,复杂度是 \(2^mm^2n = 1.63 \times 10^{10}\) ,不太能跑,不过状态数相对较少,说不定可以试一试。不过这个东西两头的时候细节相当恶心,又只能拿到 \(80pts\) ,不大甘心。

想到这里的时候,T2大概开了 \(40min\) ,个人认为还是比较正常的。

后面的过程,就想得有点多了,整个思路也越来越不正常,最后时间不大够了,决定写暴力。如果只写裸暴力的话未免有点太亏了,想来想去写了个复杂度大概是 \(m^{n-m} m!^2 \times nm\) ……的暴力,大概就是暴力枚举每个斜行由 \(1\) 变为 \(0\) 的位置,然后再暴力 check 第二个条件是否合法。这玩意儿剪下枝的话,应该还是能跑个 \(8 \ 8\) 的。

然而……整场比赛我可能就败在这个地方了……

考场上枚举位置的时候,写了个我可能会后悔很久的错误……

inline void dfs(int cur,int tot) {
if(cur > tot) { Calc();return; }
For(i,1,min(cur,n + m - cur) + 1) P[cur] = i,dfs(cur + 1,tot),P[cur] = 0;
}

然而这个枚举的上界……我算错了……

inline void dfs(int cur,int tot) {
if(cur > tot) { Calc();return; }
For(i,1,min(min(cur,n + m - cur),n) + 1) P[cur] = i,dfs(cur + 1,tot),P[cur] = 0;
}

只要改一下就行了……

就是这个玩意儿……它能跑对所有 \(|n-m| \le 1\) 的数据。很不幸,所有样例都是 \(n=m\) 的。

后来拿着这个暴力程序找了 \(min(n,m) = 2\) 的规律,\(min(n,m) = 3\) 的时候发现找不出来了……

又拿这个程序,把 \(8 \ 8\) 以内跑得慢的点打了下表。自认为有 \(65pts\) ,就去 rush T3的暴力了。

T3暴力我直接写的 \(52pts\) 的,调了好一会,才调对。

考场一出来,FakeBeng说T2他找了 \(65pts\) 的规律,\(\min(n,m) = 3\) 也有规律,说什么一直乘 \(3\) 就行了。我当时觉得心头一凉……我还地记得我的程序 \(3 \ 5\) 跑出来是 \(1300\) 左右的一个数字,而他说他裸暴力跑出来是 \(1008\)。

中午吃饭的时候,完全没有心思。一直在想到底哪里有问题……后来猛然间发现,这个枚举上界似乎是有问题的,只有在 \(|n-m| \le 1\) 的时候才是对的。这样,因为所有的东西都是拿这个错误的暴力跑的,自己的 \(65pts\) 就变成了 \(rand(15,35)pts\) 了。

我回头仔细想了想,其实如果这个暴力我只要写对了,所有规律我肯定是能轻松找出来的……我的暴力都能跑 \(8 \ 8\) 了,乘 \(3\) 的规律不可能看不出来。

晚上的时候在知乎上看到了 \(Wearry\) 的 \(O(\log n + \log m)\) 的题解……才意识到,自己考场上想的状压DP状态数真的很少,在 \(n > m + 1\) 的时候就只有一种状态了……也就是说自己再冷静分析一波,也许可以在考场上直接写出非打表的正解……即使不写状压DP,也可以通过小范围的分类讨论,直接得到一个式子,式子有点恶心,但也能做。

最后T3因为 long long 的原因挂了一个点。\(100 + 100 + 100 + 100 + 25 + 48 = 473\)

出来的时候 doe 还告诉了我 Day2T3 的非 DDP 的正解,倍增+DP。听上去会比 DDP 好写很多,相较于树剖版的 DDP 也会少一个 \(\log\) ,大致做法和nyg的NOIP模拟题几乎是一模一样的。不过她自己也很遗憾没写出来。大概一眼看到觉得是 DDP 就不会去想其他做法了吧。

最后这场NOIP以我校全线崩盘而告终。我问了一圈,似乎所有人全都吊死在了这个T2上,也不知道该说什么好。

不管你怎么讨厌这套题,不管你怎么讨厌这个T2,但这就是你的NOIP分数,实实在在,呈现在你眼前,有些刺眼,却又无可奈何。

仔细想起来,上一届NOIP考得似乎也不是太好,但是HNOI的时候,完美翻盘。

所以,HNOI2019?

This will be our story.

UPD after HNOI2019:

现在回头看这篇所谓的游记,感觉自己的戾气挺重的……怎么说也该反思一下翻车的原因吧……

说白了,一部分原因还是自己心态出了问题,给自己的期望太高。当得分达不到自己所谓的期望的时候,就不想动键盘。事实上,Day2T2写一个我最后写的爆搜不需要超过 \(20min\),可最后我在这道题上花费了将近两个小时。当发现自己得分效率不高的时候,应当果断放弃继续深入思考,拿走现在会的分数。Day2T3即使写不出 DDP,最后写一个不错的暴力相信也不算个难事。

另一部分就是这个写挂的问题。现在写题(之前也有)有个不太好的习惯,不喜欢对拍,总是相信自己的准确率。HNOI2019 已经吃了一次亏了,如果不改的话 NOI 恐怕还会重蹈覆辙。

NOIP2018 差点退役记的更多相关文章

  1. NOIP2018游记 & 退役记

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

  2. Noip2018/Csp2019 ------退役记

    退役记 上记 不知道为啥,自从今下午某大佬的人生第一次政治运动(虽然最后被镇压,现在小命难保)后,仿佛有一种看破感. 以下有点在自作多情,不喜者可以不看. 学信竞快一年了.可以说有收获也有失去吧. 收 ...

  3. NOIP2018游记(退役记。)

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

  4. Noip2018退役记。

    下面是边考试边写的严肃版退役记\(:D\) Day0 其实我本来想取个这个名字:\(NOIP2018\)提高组复赛试题解析 但是这个博客自己求生欲望太强自己改名了. 先占个坑. noip考前毒奶 \( ...

  5. NOIP2018滚粗记

    NOIP2018滚粗记 day 0 上午,说是可以休息,然后睡到快9点起来吃个早饭去了机房.刷了几个板子就十二点了 下午大概就是看别人总结,颓知乎,完全没心思写代码. 晚上不要求,然后在寝室颓了一下, ...

  6. ACM退役记&&回忆录

    ACM退役记 2017.9.19星期二,"九一八事变"八十六年后的第二天,永远记住这个日子,刚好是我报名ACM到现在,刚好满一年,而今天正是我注册杭州电子科技大学OJ的时间(就是这 ...

  7. NOI2018退役记

    NOI2018退役记 终于我也退役了-- Day0 高中毕业前最后一次坐飞机了--在机场干什么呢?当然是打元气打元气打元气.下飞机干什么呢?当然是打元气打元气打元气. 有接机服务,大巴上有个导游,又向 ...

  8. [日常] HEOI 2019 退役记

    HEOI 2019 退役记 先开坑 坐等AFO 啥时候想起来就更一点(咕咕咕) Day 0 早上打了个LCT, 打完一遍过编译一遍AC...(看来不考这玩意了) 然后进行了一些精神文明建设活动奶了一口 ...

  9. ZJOI2019day1退役记

    ZJOI2019day1退役记 每天都在划水,考场上心态炸了,也没什么好说的. 有人催我更退役记,等成绩出来了再更更吧,成绩出来也没心情更了,落差好大,还打不过文化课选手 虽然被卡常数卡到心态爆炸,但 ...

随机推荐

  1. poj2226 Muddy Fields 填充棒子(二分匹配)

    参考博客:https://blog.csdn.net/liujc_/article/details/51287019 参考博客:https://blog.csdn.net/acdreamers/art ...

  2. Python学习第十四篇——类初步使用及面向对象思想

    class Restaurant(): def __init__(self,restaurant_name,cuisine_type): self.name = restaurant_name sel ...

  3. HTTPS建立连接的过程

    HTTP建立连接的过程点击:HTTP三次握手.一次HTTP请求都发生了什么 一.HTTPS   HTTP是超文本传输协议.HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私 ...

  4. rbac组件权限按钮,菜单,可拔插

      1.通用模板 overflow: auto; //在a和b模板中进行切换 a 模板 :左侧菜单跟随滚动条 b模板  左侧以及上不动 **** <!DOCTYPE html> <h ...

  5. Java 读取配置文件数据

    Properties类 Properties类,是一个工具类,包含在java.util包中. 功能:可以保存持久的属性,通常用来读取配置文件或者属性文件,将文件中的数据读入properties对象中, ...

  6. React Native之FlatList的介绍与使用实例

    React Native之FlatList的介绍与使用实例 功能简介 FlatList高性能的简单列表组件,支持下面这些常用的功能: 完全跨平台. 支持水平布局模式. 行组件显示或隐藏时可配置回调事件 ...

  7. js获取非行间样式/写入样式(行间)

    <!--DOCTYPE html--> <html> <head> <meta charset="utf-8" /> <sty ...

  8. C# Note28: Dispatcher类

    在项目中也是经常用到: 刚见到它时,你会想:为什么不直接使用System.Windows命名空间下的MessageBox类,何必要这么麻烦?(认真分析看它做了什么,具体原因下面解释) 主要介绍的方法: ...

  9. C# Note17: 使用Ionic.Zip.dll实现解压缩文件

    首先下载ionic.Zip.dll,然后在项目中添加该引用,之后就可以在cs中使用了: using Ionic.Zip; #region Ionic.Zip压缩文件 private readonly ...

  10. C++中String类的字符串分割实现

    最近笔试,经常遇到需要对字符串进行快速分割的情景,主要是在处理输入的时候,而以前练习算法题或笔试,很多时候不用花啥时间考虑测试用例输入的问题.可是C++标准库里面没有像java的String类中提供的 ...