有生之年系列之几道码农题 (6/12)

VictorWonder posted @ 2015年3月24日 12:15 in 专题训练 with tags 模拟 线段树 码农题 , 2963 阅读
      Kenji's Life告诉我们,代码能力不够强是绝对不可能通关的。考虑到最近状态不对,代码能力都快变成负数了,所以决定抓紧时间,在省选前好好锻炼一下代码能力,这里推荐几道码农题供大家参考参考。

      看到这道题估计就有人要吐槽了,这种代码不超过3k的题目也能算是码农题?可持久化线段树+矩阵随便搞搞不就行了。但是,如果不准用矩阵呢?当年的我too young too naive,依靠着分类讨论大法硬生生地将这题给码了出来,然后在本地AC了——请注意,只是本地AC了而已,后来证明,手打的spj不够靠谱,程序扔到Tsinsen就出错了,一直不知道错在哪里。最近突然想到了这道题目,就扒了出来,经过一番研究后发现原来是因为输出用了%lf,改了之后又发现,被卡内存了!只好默默地将记录操作类型的op数组从int改成了char,总算是AC了。因为是很久以前的代码,代码风格有点奇怪,再加上一些改动,简直不能看,大家将就一下吧。
 
      首先申明一句,我发这篇文章绝对不是在黑卓亮,前两题都是他出的这只是一个小小的巧合,不要在意这些细节。这道题是ZJOI 2014 day1 T1,考场上我打了个暴力拿了20分,结果出来后Claris就告诉我这道题要用线段树(怎么又是线段树)。虽然很早就知道标算怎么写了,结果一直没有这个胆量,直到昨天,花了三个多小时,硬着头皮终于码出来了,多亏了手头的数据,否则应该是怎么都不能AC的了。(这再次说明这次省选我就要滚粗了)
 
      因为很重要,所以要说两遍:我发这篇文章绝对不是在黑卓亮。不管你信不信,反正我是信了。这道题目有一共三个大的坑点:1、读入很坑,Pascal选手有EOLN很方便,C++选手就比较苦逼了(虽然听说也有EOLN类似的东西,但我不会用TAT),只能用gets()读入再根据空格分离。2、构建那个模型很麻烦,我的构建方法是先确定一个顶点,再从这个顶点补完正方体的三条棱,最后,根据其中两条棱确定一个平面,然后再将剩下的一层一层补完,只能说是各种蛋疼。3、搜索常数大点就会超时,我原先的做法是,搜索到n+1步的时候就进行print()操作,统计一下和,本地开O2最慢的点要跑3.5s,BZOJ上是10s卡过去的,后来听从了Claris的建议,变成了边搜索边求和,结果本地瞬间跑到了0.5s。所以说,搜索的姿势很重要。最后,给出20.8k的标程,大家感受感受。
 
      这道题目恶心之处在于公式的推导,这里简单讲一下公式的推导。假设直线是y=kx+b,点(xi,yi)到直线的距离就是,只要有点数学基础大概都知道这个公式。然后我们将其平方,再把所有式子加起来,然后用k表示b,我们会发现得到了一个很简单的式子表示x的平均数,再将b代回原式,我们就得到了一个与k有关的复杂式子,我对这个式子进行了求导,最后得出的关系,用公式求出k的值再求出整个式子的值。但是,当B=0的时候,就无法通过该方法求解了,这个时候的答案就是A(我也不知道为什么,是根据数据猜出来的)。这道题另一个比较恶心的地方在于环接外向树,一般的做法好像是分类讨论,我这里有一种用时间来换取编程复杂度的方法,在dfs的时候,将环上的一条边去掉,这样就变成了树上的问题。假设去掉的边两端分别是p1和p2,查询的时候,对于x和y两个点,需要查询(x,y)、(x,p1)+(y,p2)或(x,p2)+(y,p1),取最小的那个答案就行。
 
      好久没有碰上要用莫队的题目了,结果现在连莫队都不会打了。先是看了一遍COT2的程序,然后明白了树上莫队该怎么搞。码完代码后死活AC不了,然后打开了数颜色的代码,结果发现TMD带修改莫队打错了,改来改去最后总算是AC了。具体搞法就不说了,大家应该都懂。
 
      我已经不想再说些什么了,都是泪啊。卡了n久的常数,最后还是在正确的时间、正确的地……好吧,其实是在RP的强大作用下收获了两个AC。本来考虑是中间这四个点特判一下,后来想想如果被别人给hack了还不是一样?所以最后就是这个样了,我提供的程序保证输出的正确性但不保证速度,如果想要追求速度可以去看std,虽然不明白为什么同样的方法std就是要比我快,估计这就是大神和蒟蒻的差别了……
      UPD1 : 据说替罪羊树常数要比Treap小?如果哪天我闲了没事,试试把Treap改成替罪羊树,估计卡不掉了吧……
      UPD2 : 今天早上抱着复习替罪羊树的态度把Treap改成了替罪羊树,可能是因为没打结构体,或者是我的替罪羊树打萎了,最后速度反而更慢了……囧……
 
 
 
 
 
 
 
      大致就先坑到这里了,后面这些只有题目链接没有代码的都是我还没有坑而且估计不是一天两天就能坑完的,所以先扔在这儿,如果什么时候我能想起来这个坑的话,我一定会填完的……(为什么感觉这话各种没有志气)
      另:为什么感觉与人名有关的题目总是各种坑呢……

 

Emma 说:
2023年1月18日 19:06

In the lifetime series Code Farming, a few questions are asked in order to get an understanding of what the code farm is. The first question is, "What is a code farm?" A code farm is a place where code is grown. The natural CBD oil second question is, "How is code grown?" Code is grown by farmers who work on the land, using special machines to plant, grow, and harvest the code. The third question is, "What do code farmers do?" Code farmers work on the land, using special machines to plant, grow, and harvest the code.


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter