[SCOI2015][吐槽]******SCOI2015

本文记录了作者参加NOI比赛的经历,包括赛前准备、比赛过程中的挑战及赛后反思。详细描述了技术问题的解决过程及团队成员间的互助。

Day 0 (Fri 04/17/2015) :

中午:

坑钱的UESTC培训终于完了,一群人去酒店。感觉还能住的样子。毕竟这个月住的地方都太…………了。

下午:

Boliuraque和leijp坑到旁边的网吧打代码。结果真的打了一下午代码。SA的模板敲了一遍,看了看主席树。如果其他人知道我第一次去网吧只是打了一下午代码岂不是要笑死我?

晚上:

所有人一起吃了个饭。晚上研究了很短一会博弈论(斗地主)。21:30睡觉。

Day 1 (Sat 04/18/2015) :

早上:

一大早被Boliuraque喊醒。他说他半夜吐了,一看地毯上Orz。赶快锁门吃饭,等人收拾吧。

上午:

8:00开考;
大约9:00熊哥送来了水和奥利奥,还有Boliuraque的药,感动~~
至于题目:

  • 第一题:这么水?打了个Dinic和暴力对拍就不管了;
  • 第二题:没想法,先看第三题;
  • 第三题:不是裸半平面交么?
    (3hrs过去了)
  • 第三题敲完了,回头看第二题。(好像可以开环,贪心,建树,乱搞……)

12:59 :啊!!!,第二题还没敲出来!
13:00 :收卷。Orz。

下午:

陪熊哥去给Boliuraque看病,辗转两家医院,最后找了个老中医(真是老中医)。让药店帮忙煎药(晚上熊哥去拿的)。

晚上:

看到成绩140。Orz………………。
看了一会CCAV的电视剧。睡觉。

Day 2 (Sun 04/19/2015) :

早上:

没啥好说的。除了起得有点晚。

上午:

考试进程:

  • 第一题看起来好水的样子。随手敲个DP;
  • 第二题没想法,先看第三题;
  • 第三题:一眼看出树链剖分+主席树,码代码…………
    (2.5hrs过去了)
  • 第三题开始对拍了,第二题写个暴力吧;
  • 好像没测测第一题速度怎么样?靠,原来写的是暴力!! = =|||

12:59 :啊!!!,第一题还没敲出来!
13:00 :收卷。Orz。

中午:

吃饭的时候都很郁闷。只有我和xyt这种神经大条,考成翔都能无比开心的在谈笑风声。

下午:

吃完饭,坐到大巴上。和xyt,Boliuraque研究博弈论(斗地主)。反正一般至少五点才能出发,时间还久。

熊哥电话:

  • 熊哥:你**第二题怎么CE了?
  • 我:不会啊,我走之前编译运行了。
  • 熊哥:我让他们去你本机上试试……

一会儿……

  • 熊哥:你本机上还是CE。
  • 我:……

还好很快申诉时间到了,一群人走向基实大楼。

  • 熊哥:你去申诉一下第二题。

(等待轮到我们的漫长时间…………)
被带进考试场,看到自己的屏幕上,Dev-c++里面,第二题明明白白CE了。

  • 谭天乐:你这个地方尝试调用了xxx函数,但是没定义。
  • 我:诶,这个函数我不是最后改了名字么?
  • 谭天乐:你是不是这个地方没改掉?
  • 我:怎么可能,我改完编译运行了的。
  • ……
  • 我:我离开考场的时候没关Dev-c++……
  • 谭天乐:是不是有人顺手给你按了个Ctrl + Z,Ctrl + S?
  • 我:大概是吧……

我的就算完了。那个手贱的人又抓不到。只有自己吃个哑巴亏。
(一群人去管Boliuraque申诉了)

  • 周老师(CCF四川特派员):你这个只能当个教训。有可能有的人比较手贱。下次NOI的时候记住,一考完马上把编辑器关掉。最好把显示器都关掉。只要电脑不关就行。
  • 我:好吧……

Orz………………………………………………
(此处隐去一万句脏话)

跪了。

回绵阳的路上成绩就出来了。我拿了个第8,省队正中间。Boliuraque卡线进队了。但是Willing.Live.卡线退役了。
唉~

就这样准备NOI吧。

### 关于 SCOI2009 WINDY 数的解法 #### 定义与问描述 WINDY数是指对于任意两个相邻位置上的数字,它们之间的差至少为\(2\)。给定正整数区间\([L, R]\),计算该范围内有多少个WINDY数。 #### 动态规划方法解析 为了高效解决这个问,可以采用动态规划的方法来处理。定义状态`dp[i][j]`表示长度为`i`且最高位是`j`的WINDY数的数量[^3]。 - **初始化** 对于单个数字的情况(即只有一位),显然每一位都可以单独构成一个合法的WINDY数,因此有: ```cpp dp[1][d] = 1; // d ∈ {0, 1,...,9} ``` - **状态转移方程** 当考虑多位数时,如果当前位选择了某个特定数值,则下一位的选择会受到限制——它必须满足与前一位相差不小于2的要求。具体来说就是当上一高位为`pre`时,当前位置可选范围取决于`pre`的具体取值: - 如果`pre >= 2`, 则可以选择`{0... pre-2}` - 否则只能从剩余的有效集合中选取 这样就可以通过遍历所有可能的状态来进行状态间的转换并累加结果。 - **边界条件处理** 特殊情况下需要注意的是,在实际应用过程中还需要考虑到给出区间的上下限约束。可以通过逐位比较的方式判断是否越界,并据此调整有效状态空间大小。 ```cpp // 计算不超过num的最大windy数数量 int calc(int num){ int f[15], g[15]; memset(f, 0, sizeof(f)); string s = to_string(num); n = s.size(); for (char c : s) { a[++len] = c - '0'; } // 初始化f数组 for (int i=0;i<=9;++i)f[1][i]=1; // DP过程省略... return sum; } long long solve(long long L,long long R){ return calc(R)-calc(L-1); } ``` 此代码片段展示了如何利用预处理好的`dp`表快速查询指定范围内的WINDY数总量。其中`solve()`函数用于返回闭区间\[L,R\]内符合条件的总数;而辅助函数`calc()`负责根据传入参数构建相应的状态序列并最终得出答案。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值