游记——2017 CCPC-WFINAL
http://bestcoder.hdu.edu.cn/2017wfinal-board.php
2017.5.6
今天5:30就起了床,准确说是被我妈硬拖起来的。因为要赶火车,不能拖拉。我们7:00的火车,8:30到达杭州,恰巧碰到一个初二妹子跟我在一节车厢里。一路上我没有一丝顾虑地看着数学必修二,一脸懵逼地看着上面的立体几何(大佬们肯定都觉得简单吧,然而就算是这样今天立几依然炸了):反正我就是去打酱油的嘛qaq
下了火车就去坐地铁:从火车东站坐9站坐到文泽路下车,竟然一个人要收5块钱!!杭州地铁临时票是不可回收的,就是一张带磁的卡片,到了站就扔掉了,这点看南京还是做的不错的,便宜又环保啊!到了地面,就摸不清头脑了,好多路人指着隔着一条河的杭电大酒店告诉我们那是航电,万脸懵逼。。。。。不过我们顺着河走,问了无数路人,最终还是到了航电。(ps:杭州是真的风景好!马路两旁都是鸟语花香的,这就更让我觉得像是春游了)
第三教学楼。其实大老远就能看见yl了,她真的好萌啊,喜欢(❤ ω ❤)。我一上楼,就看见好多奇怪的队名,忍不住发笑。比较幸运,我们team009就在一楼(ps.全程第一上海交大的土豆队就坐我们的后面,全程安静,真的好厉害)。
10:00。去试机。试机题目都挺简单的。最快的队用了5分钟就都a掉了。我们犯了一些低级审题失误,半个小时才都提交出来,没记错的话rk54。当时看了一下比赛规则:前50个队是有奖牌的。当时就想拿个铜就够好了QAQ哎
12:00。正式比赛。比赛刚开始的时候狂紧张,争分夺秒的感觉,结果发现c++还没有装。急死了急死了。花了2min终于装好,就开始狂敲1001,旁边的小妹妹们在帮我读题目,当然是wa了,也差不出错来。范范她说1005简单,我又去做1005,一开始样例都没有过,后来终于过了交上去又wa了。急得要死,后来发现读题有问题,又交了一次,才对。这时候已经过去了30min了,当时真的觉得要垫底了。
ccpc有个地方特别好玩,就是你们组做对一题,就会给你们一个气球,不同气球代表着不同题目,整个赛程都有一股喜气洋洋的气氛。所以,当一个红气球被插在我们的盒子上时,我就突然非常有成就感,当时突然并不觉得自己是去打酱油的,至少还能我们还有能力拿气球的。
真的开始好好做题了。范范把1001打出来了帮我查错误,并将1002/1003的题意都告诉了我,表示不会做。我就坐在旁边想题,那时候氛围特别令人享受。突然,范范发现了题目中一个很邪门的话:“every time you pass a problem, each unsuccessful try for that problem before is counted as 20 minutes penalty”,这句话的意思是如果你这题到最后都没有对的话,你是不用扣分的!!!竟然又是审题出了问题。改了改交上去,还是错。还没来的及伤心,我们就发现多测数组没有清空,提交,终于对了!天呐!终于对了。这时候已经过去54min了。rk55。
其实做出这题的时候我1003就有了思路。花了半个小时敲完了。这道题我最终大概写了将近200行,但是一遍就对了,当时开心的要跳起来。感觉老天很眷顾我。此时1h23min,rk24。
当我在做1003的时候,范范在想1002和1007。她说1002是dp,我就朝dp方向想,她开始编1007。但提交了两次都不对。我在旁边想1002,因为觉得还有挣扎的机会所以绞尽脑汁。大概想了15分钟,突然就有思路了。非常非常的激动。她也很激动,就把座位让给我让我去编1002,她自己把1007的错误代码打下来查错去。可能因为上一题一写就200行的缘故吧,这题写了大概60行十分轻松。而且一遍就对了。此时1h51min,rk20。
这时候已经没有想一想就会的题目了。她查了1007,我在看其他题。真心不会做图论,就想1008。没过几分钟,突然,她说她1007对了,太开心了,当时特别爱她。此时2h2min,rk14。
接下来的很长时间都没有进展。我盯着10^18的数据有点发慌。这么大的数据只有推公式了,于是就想矩阵。大概想了很长时间,推了一个比较玄学的公式。交上去的时候显示runtime error。并不是很吃惊,因为这题我没准备做对。结果发现n我定义的是int,改成long long,竟然就对了!天呐!此时3h11min,rk11。
再然后的然后,就再也不会做题了。范范做了1004,但不大对。我们就在浪了,反正如果要得金的话还要做两题,然而这不现实。所以就开始各种玩,各种上厕所,等等。
我们最终做了6道题,排名从rk11一直降到了rk18,稳银。然而因为是中学组,被自动跳过了。虽然当时有点小失落,但一想到三校联盟rk3也被跳过,她们原来可以捧着奖杯回去的,所以心里平衡多了。
附(本人做的五道题的题解):
1001 Automatic Judge
题意:ccpc考试中,如果这题最后AC了的话,之前每次的错误操作penalty都+20,AC的时间也要加上。求AC题数和penalty。多测。
方法:模拟
思路:将HH:MM转化成秒,用scanf简单一点,注意多测数组需清零。
1002 Building Shops
题意:有n个商店(n<=3000),给你它在数轴上的位置xi以及建造它所需的费用ci(-10^9<=xi,ci<=10^9)。对于每个商店,你可以用ci的费用建造它,也可以让顾客们去左边的商店,其花费为它们间的距离。求最小花费。多测。
方法:dp
思路:先将商店按xi从左到右排序。首先考虑最左端的商店,因为它的左边没有商店,故它只有一种选择:花ci的钱建造。对于剩下的n-1个商店,我们设dp[i][j],表示前i个商店且j是此区间中最右端的商店(也就是j+1~i都没有建商店的意思~)。则有如下转移方程:
当i!=j时,dp[i][j]=dp[i-1][j]+(x[i]-x[j]) //第i个不建
当i=j时, dp[i][j]=min{dp[i-1][k]}+c[i] //第i个建
1003 Coprime Sequence
题意:给你n个数ai(n<=10^5,1<=ai<=10^9)。要求删去一个,使得剩下n-1个数的最大公约数最大。求最大公约数。多测。
方法:乱搞?!?
思路:先从小到大排序。我们将最后的方案分为两种:1)删去的数是a1;2)删去的数不是a1
对于情况1),结果即为a2~an的最大公约数,从前往后辗转相除,得到ans1。
对于情况2),因为a1不删,所以最后的最大公约数肯定是a1的约数。因为a1<=10^9,又因为前十个质数的乘积>10^9,故a1最多有大约2000个因数,这是在复杂度范围之内的。先生成其所有因数,在从大到小比较,若符合条件,则为ans2退出。
最终的结果为ans1与ans2中较大的一个。
因数生成十分繁琐,首先要用筛法求出sqrt(10^9)中的所有质数(类比判断合数),再将其分解质因数。接着,用全排列枚举每个质因数的幂。最后将全部的因数从大到小排序。
写了我大约200行的代码,比赛后发现代码被封存了,有点遗憾。
1005 Easy Summation
题意:给你n,k(1<=n<=10^4,0<=k<=5)。求Σi^k(1<=i<=n)。多测。
方法:预处理
思路:额就是预处理,这题挺简单的,比较良心qaq
1008 Happy Necklace
题意:小Q要给他心爱的妹子送项链(链状非环状)。有n个珠子(n<=10^18),有红蓝两种颜色。他的妹子认为,如果对于任意相邻质数个珠子红珠子数都不小于蓝珠子数,这个项链就是合格的。求全部方案数(不考虑旋转与倒置)。结果对于10^9+7取模。多测。
方法:矩阵快速幂
思路:我们先从比较小的质数考虑。
prime=2时,我们得出相邻两个珠子不能全为蓝色。
prime=3时,我们得出两个蓝珠子间必须至少两个红珠子。
然后我就得出了玄学的结论:只要满足,任意两个蓝珠子间有两个或以上的红珠子,该方案即可行。
想到矩阵。设红珠子为0,蓝珠子为1
我们从左到右确定珠子,因为每个珠子只跟它前面两位有关,故考虑它的前两位,有三种状态:00,01,10(11时蓝珠子相邻,不可行),就有:
dp[n][00]=dp[n-1][00]+dp[n-1][10]
dp[n][01]=dp[n-1][00] //10的话会出现101的情况,故不可行
dp[n][10]=dp[n-1][01]
故算得如下矩阵,快速幂即可:
dp[n][00] 1 0 1 dp[n-1][00]
dp[n][01] = 1 0 0 * dp[n-1][01]
dp[n][10] 0 1 0 dp[n-1][10]

浙公网安备 33010602011771号