题外话
由于这个星期一直在做Java ee和.net实验,状态不是太好,做了几天几夜总算在周五晚做完。于是周五那场CF做了一下补补状态,傻逼题A居然挂了。。。早上五点半起床准备坐火车去牡丹江,这时快要累出翔。火车上睡不着,于是跟他们几个打牌消磨时光。一点多时,我们到达了牡丹师范学院就餐,居然还要我们自己掏钱,呵呵呵。。。
热身赛
刚进场,发现对面是一只俄罗斯队伍,由于东欧竞赛水平很高,于是当时我们快要吓尿了,后来事实证明他们实在是水到爆了。。。热身赛的F题由于我们没想到这次是第七届,于是我们拼人品,还好第三发就A了。。。A题直接暴力。有一题是这次比赛送的书上的原题,他两直接扔我敲。有一题忘了。有一题是计算最靠近的真分数(没太仔细看题),Timer想了出来。有一题是01字符串解密,我们三发现不会,各种浪交,最后吴佳男学长告诉了我们解法,顿时无限膜拜。
晚上在宾馆颓废了一下,打了两个多小时牌,Jingo和大囧哥输的只剩下底裤了,哈哈。而我和yangboy没脱过,并且最后每人赢了一件衣服和一条裤子。
正式赛:
赛前我们看了一下气球,发现有很多颜色都很浅,这就是xiaodao周六晚在人人上说要2小时AK退场的节奏吗?
比赛开始后,我们发现A是一个大水题,求n个数的lcm,我开始时想错了,然后Jingo推了一个比较靠谱的算法,于是我按照他的思路交了一发WA。
这时Timer发现G题是一个大水题,于是马上我换下机器给他,1A。
我发现E题是一个大水题:每次只能够删一对数,最后必然剩下两个数不一样,按大小输出。我看题时注意到了a[i]<=2^31,于是我sort了一下敲了一发上,莫名其妙的WA。。。
于是我退下,我们讨论了一下A题,计算了一下时间复杂度,发现java大数可以水过的,于是Timer上去敲了一发过了。
Jingo看完了K题,发现跟昨天的E题基本一样,只不过多了一个加密。于是他上去敲,我在看他敲的代码,测试了一下样例,发现不对。由于他的代码貌似有点复杂,于是他说换我上去敲,于是我在Jingo的帮助下敲完1A。
这时Jingo说用map试着做一下E题,于是他上去敲完交了一发TLE了。我在Jingo敲的时候重新看了一下我的代码,发现没有问题。当Jingo T了之后,我继续上去调我的代码,发现本地的编辑器在用long long时都有点问题。于是怀疑评测机的long long的输出问题,看了一下提问,发现没有怎么说明。于是我们用一题已经过了的题来尝试是lld还是I64d的问题(我们忘了昨天热身赛是否有测试的问题)。尝试了几次之后,我又试着改了一下交了一发上去,看了一下statues,发现是waiting,这时主办方说后台数据在重测,我们当场就想呵呵了。。。
过了很久,终于全部返回了一个TLE,于是我和Jingo打算放弃。
Jingo和Timer转去看D题,由于Timer和Jingo D算了一下复杂度,发现都没有什么思路,于是转去看有10来个队伍过的J题,发现可以把问题转换为一个求m在区间[a,b]互质的个数,他们问了一下我,我想都没想就说容斥原理啊。于是我上去裸敲。敲完之后发现样例不对,于是怀疑容斥原理部分的代码有问题,Jingo其实是发现了,但是我没弄明白他的意思,于是我把我的代码给他改,在他改的时候我找了一下书包里的模板,发现那部分代码没搞错,理解了一下Jingo说的意思,于是从Jingo手里抢过了机器,改了几次,尝试了几组数据过了。。。
这时Jingo跟Timer继续讨论D题,由于机器没有人用,所以我想直接手写一个hash上去试一发,没多久敲完,他们两没有看我的代码,Jingo帮忙测了几组数据,发现可过,于是我直接交了,statues显示在running。我刷新了几次之后,发现还是running。当时真有骂人的冲动了。于是我就不管去看其他题。过了10分钟左右,总算返回了一个AC。
Timer说H题是一个图论题,于是我和Jingo看了一下H题,发现样例算不对,后来yy了一下,发现有点对。于是我直接敲了一个最短路上去交了一发,WA。。。于是我们怀疑题目理解错了。看了一下提问,总算找到了一个比较可信的解释。于是我想直接把最短路算法加多了一维存剩余的时间,问了一下Jingo是否可行,Jingo觉得可以,于是我直接敲完交了一发,WA。我打印代码,Timer和Jingo发现了D题一个最有可能的解法,由Timer上去敲。
接过打印后的代码,我一行行的看代码,发现是spfa在松弛时有一处手残了,于是把Timer叫下改了一下交了上去,AC。当时感觉有点愧疚,这么一个简单的代码都会写残了。
AC了之后,Timer继续写D题。我之前听Timer说C题像一个AC自动机,于是我和Jingo上去看。发现没有什么思路。后来Jingo上去帮Timer看D题的代码。而我继续想C题,后来总算想到了正解。
C题题意是:给出N(N<=20000)个操作,每个操作有三种方式:
1.add s,表示在字典中添加一个单词s(如果有不管)
2.Del s,表示在字典中删除一个单词s(如果没有不管)
3.Query,表示询问在文本串str中在当前的字典中出现的单词次数。
解法:
首先离线把所有的操作读进来,然后对于add操作,添加到trie中,其他的不管。然后建立fail指针,跑一边AC自动机,用数组a存假设每个单词都没有被删除时的个数。
模拟一下操作,如果是add并且该串不在字典时,sum加上该串的出现次数。如果是del并且该串在字典时,sum减掉该串出现的次数。如果是query时,直接输出sum。
交了几发,都MLE了。应该是我的AC自动机模板有点问题。最后他们两没把D题做出来,我也没有参与到他们打讨论之中,如果我讨论进去的话,会不会多出一题呢???因为他们的思路是对的,就是卡了常数。换一个差分数列或者树状数组就能过。
总之这次比赛是这么多次比赛中最不爽的一次。
颁奖同样很奇葩,把所有的获奖队伍念完直接随便上去领奖,范神(四省赛三连冠)上去领了四次奖(一二三等奖、冠军)。主持人在念冠军队伍时,念的是:欢迎哈尔滨工程大学安可队上台领奖,当时我们都笑了。总之这次比赛槽点真多。
回来是三天的端午假期,目前我还不能够以这样的借口来颓废三天,因为我还没有拿到offer,很多学长比我强,但是他们拿offer也不容易,至于我现在这样的水平,会有人要吗?低俗的说,我要为自己的家人、自己的未来着想,我要变得更强才能够在未来为我的家人提供更好衣食住宿环境。
最近的这几场比赛和近两年的比赛专门考察算法知识的题目很少,现在的题目考察更多的思维,所以以后专门做CF和SGU。
到这个学期结束时的目标:CF上1800,题数在300题以上。
以上~~~