【队内训练】CCPC2016杭州题解

CCPC2016杭州
A HDU 5933 ArcSoft's Office Rearrangement(模拟题) 163 / 509
B HDU 5934 Bomb(tarjan) 112 / 375
C HDU 5935 Car(贪心) 156 / 660
D HDU 5936 Difference(折半暴力) 37 / 304 (赛后过掉)
E HDU 5937 Equation(dfs) 25 / 64 (赛后过掉)
F HDU 5938 Four Operations(贪心) 171 / 513
G HDU 5939 Game of Eliminate 4 / 62
H HDU 5940 Hazy String 0 / 3
I HDU 5941 Inequality 3 / 39
J HDU 5942 Just a Math Problem 7 / 23
K HDU 5943 Kingdom of Obsession(二分图) 72 / 776
过程
这场是第一次打这种前期爆炸后期翻盘的场,心情真的很好,开局由于A的模拟ffx一上来有个特判写错了,找了好久的bug也找不到,于是换了wk上来找bug,电脑分两块ffx在右面敲F,这时候wk找到了一个bug改了一下提交,又wa,时间已经一个多小时,全队心情爆炸,之后ffx随便想了一组A的样例,发现有错误,原来wk找到bug之后特判的位置改错了,又改了一下就过了,这时候ffx也敲完了F,submit,wrong anwser,返回查看代码,怎么算怎么对,后来发现字符串长度要判一下,不然可能会非法访问,改了之后ffx加了个初始化的ans,如果不满足条件就不走第二种,但是由于当时没想到答案会出现负数,又wa了,下来之后发现了这个问题,改了就过了,这时候已经rank107了,在ffx敲F的时候wk发现C是个贪心,于是F过了就上机开始敲,然后就1A了,交了之后rank变成了102,wk敲C的时候ffx和sbw推出了K的一些东西,ffx上机敲了K题,又是1A,rank75,ffx敲k的时候wk发现B是个做过的tarjan,改改就能过,于是ffx交了K之后wk上机开始抄板子,但是敲完之后发现样例怎么也过不去,开始了将近半小时的找bug之旅,找了半小时之后,ffx决定换个板子敲一下,ffx拿出自己以前的板子对比一下发现,wk的板子有个cnt写错了(由于wk将栈改为手写,之后忘记测试,导致板子出现问题,以后还是要注意一下),之后改掉了模板的错误,B也1A了,rank变为52,已经滚到银牌区了,由于三个人过于兴奋,导致一个差不多做过同类型的D最后没开出来,又滚回了铜首,不过也算是翻盘了,很是开心。
题解
A.F 细节模拟题
A.要注意之前都用光的时候是不需要消耗次数去合并的
F.要注意可能出现负数,可能串长不够
A题代码 https://paste.ubuntu.com/p/mnVMkYD9TV/
F题代码 https://paste.ubuntu.com/p/jzXBfHkZt4/
B题tarjan
题意建模之后就是对一个有向图并且每个点有权值的图进行选点,要求最终的点集要能到达每个点而且点集的权值和最小,当弄懂题意之后就是一个裸的tarjan了,缩点之后在每个入度为0的联通块里面选一个最小的加入贡献就可以了。
https://paste.ubuntu.com/p/Kxtdy86tFC/
C题贪心
从后往前贪心,由于要求每一段都是整数秒跑完,每一段都尽量保持一个很大的速度,如果这个速度大于当前区间长度,就把速度变为当前区间长度/s,否则就看当前速度需要几秒,如果是整数秒就直接取,如果不是整数秒就让当前秒数+1,速度调成相应的速度。
https://paste.ubuntu.com/p/pWRbJJF7jh/
D题二分枚举
我们能够证出最终的长度是小于10的,这位时候我们发现情况太多,大概有10!种,当遇到这种去全排列会超时而分成两半去排列不会超时的时候,就把原题分成两半,分别存入数组,排序,遍历第一个数组,然后查找第二个数组中满足条件的结果数,(注意不要用map)。
https://paste.ubuntu.com/p/s2QBRFrKkY/
E.dfs
题意就是给你带有1-9数字的块,每个块有a[i]个,给你无数个+无数个=,问最多用已有的块凑出多少等式。1+2=3,2+1=3算两种。
我们推一下发现只有32种等式,但是这样枚举每种等式是否选择的时候2^32会超时,然后我们发现1+2=3,2+1=3,这两种等式可以在一起向下递归,只不过一个是所有块-2,另一个是-1,我们就把复杂度从Z 232 2 32 变成了 320 3 20 ,但是这样还有可能不会AC,我们再将答案最大值优化加上,也就是就算后面全选都不会超过当前最大值,这样的话我们就AC了,202ms。
https://paste.ubuntu.com/p/rJYnZyhsgk/
K题二分图
我们可以知道当s数组中存在两个质数的时候,肯定是不可以的,于是我们先本地打个表发现1e8之内两个素数最大的差是200多,猜想一下1e9最多也就600,于是先将两个数组相交的部分去掉,当s数组长度超过600是就是NO,否则对每个s数组能整除a数组的元素建立边,跑一下二分图看是否可以完全匹配就可以了。
https://paste.ubuntu.com/p/pd6zC9N6yY/




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值