Codeforces Round #186 (Div. 2)

题目链接

E题:大概能想到贪心,但细想不下去,最后问了别人,好像也没有什么严谨的证明。。。

首先,尽可能凑出大的数字,m-1,m-2,,,,,,,话说是因为如果上下两个数字互为最优的匹配,那么必选这个匹配,因为如果不选这个会使得总答案变小

然后每次就根据这个原则去选取就好了。。。看下那些AC的代码就知道了,这题主要是考想法,,,怎么证明。

然后根据上面那个结论,可以用一个奇葩的用平衡树来做的方法,就是不断的找最优匹配直到上下两个数互为最优匹配

用splay写了一发,可不知怎么TLE 61,还以为卡splay,,,吓尿了,,最后搞出数据本地跑才发现,是100000个相同的数插入splay,会形成一条链,形成一条链本来也没什么,因为splay一次就好了,但是由于我那个找前驱的函数写的比较秀逗,于是就T了,我是找小于等于val的最大的元素,如果当前节点大于val,就一直往左子树找,找到后splay到根就好了,但是!!!有可能找不到,返回一个空节点,然后就将空节点旋转了,,,相当于没旋,然后就sb了,,,,

总结:以后一道题目尽量还是用多一点的方法来实现,这样子可能会发现很多潜在的问题,要不然现场赛会怎么跪的都不知道,比如今天这个问题,还好CF数据比较强。。。

http://codeforces.com/contest/313/submission/3808238

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值