【题解】【CF958】Helvetic Coding Contest 2018 online mirror (teams allowed, unrated)

12 篇文章 0 订阅
11 篇文章 0 订阅

比赛时由于手速太慢,水的一批……
赛后改了一波题……
A1 给定两个10*10的矩阵,问是否可以通过上下、左右对称以及旋转的方式重合。
直接爆搜即可
A2 字符串Hash

B1 求叶子节点
B2 在树上选K个点,求对于K(1~N)个点之间的简单路径上的点数最大值。
1特判,2直径,其他考虑贪心,从直径的一端开始搜,剖一下重链,每次取最长即可。

C1水题略
C2 N个数切成K段,定义每段价值为和模P,求最大价值。k ≤ N ≤ 20 000, 2 ≤ k ≤ 50, 2 ≤ p ≤ 100
直接DP,f【i】【j】表示前i个切成j段,转移时,记录一下最优位置优化一下即可。
C3 N个数切成K段,定义每段价值为和模P,求最小价值。(k ≤ N ≤ 500 000, 2 ≤ k ≤ 100, 2 ≤ p ≤ 100)
依然DP,考虑维护g【i】【j】表示f【i】【j】取最小时,最后一段模p的最大值,转移考虑j-1多开一段,或者在j段基础上加在末尾,注意g【j】+当前元素如果>p应该减掉一个p。还有数组滚一下。

D1水题略。
D2线代题做不动

E1 给出平面上N个黑点,M个白点,无三点共线,问是否可以给出一个完美匹配(即黑白之间建立双射),使线段之间无交点。
结论题,N!=M输出No,否则输出Yes。比赛时窝看N只有10 ,果断写暴力还打挂了QAQ。
证明的话,大概是考虑所有匹配线段之间的长度和,最小的匹配方案一定无交点,由三角形的三边关系可知。
E2 数轴上有N*2个端点,要求选K对,每个点只能在一对中出现,定义其价值为端点距离差,问最小价值和。
(2 ≤ 2K ≤ N ≤ 500000, K ≤ 5000)
考虑贪心一定只在距离差前K*3小的点对间出现即可。
E3 给出E1的构造 1 ≤ N ≤ 10000
题解是随机一个点(???),因为无三点共线,所以按照角度扫过去,黑-白一定是连续的,只要切成两边黑白点数目都相等即可,期望NlogN

F1 水题略
F2 给定数列a,以及值域{1, 2, …, m} ,再给出一个数组b,选定一个区间,设区间内值i个数为ci,要求ci>=bi的前提下, cibi ∑ c i − b i 最小。
类似two–pointer的思想,每次ci小于bi右指针就一直往右移,记个数维护一下。
F3 FFT裸题,不过要贪心一下,每次取最小两个合并。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值