2018 Multi-University Training Contest 1

本文分享了在多校联合编程比赛中,面对高铁迟到的挑战,如何高效解决一系列经典算法题目,包括最大倍数、平衡序列、三角形划分、唯一值、再次探讨千歌序列等问题。文章详细解析了每道题目的思路与解法,如利用规律快速求解、工期规划思想处理括号匹配、堆和排序技巧应对区间问题。
摘要由CSDN通过智能技术生成

第一场多校,因为高铁11:30才到北京,鸽了队友1h。到机房后和典哥讨论了1007,用典哥发现的规律乱搞了一下,上交第一发T,补Bug+优化常数后AC,之后就是给典哥和HYX打Call了。

补题连接:https://vjudge.net/article/600

1001 Maximum Multiple 

题意:给一个整数n<=10^6,求一组x,y,z满足x+y+z==n且x,y,z均为n的因数。

求满足条件x*y*z的最大值是多少,找不到输出-1,10^6组数据。

题解:n/2+n/4+n/4,n/3+n/3+n/2,n/2+n/3+n/6,选一个

1002 Balanced Sequence

题意:给出n个仅有'('和')'的字符串,要求重新组合成一个字符串后,该字符串中存在一个子序列(可不连续),该子序列括号正确匹配,长度最长,求该长度。

题解:排序题,据说和工期规划有关。每个字符串先内部最大匹配,然后左边会多出一些右括号,右边会多出一些左括号,排序规则直接上代码。不做证明,不会。

bool cmp(const Data &A,const Data &B)
{
	if(A.r<=A.l&&B.r>B.l) return false;
	if(A.r>A.l&&B.r<=B.l) return true;//  减少前后缀 
	if(A.l>=A.r&&B.l>=B.r) return A.r>B.r;// 左括号多的排前面 
	return A.l<B.l;// 右括号少的 排前面 
}

1003 Triangle Partition

题意:给出3n个二位平面上的点,点坐标为整数,无三点共线。要求你用这些点连出n个三角形,这些三角形互不重叠。

题解:按x,y坐标排序后顺序连就可以了,没有三点共线很关键,瞎连不会出错的。

1004 Distinct Values

题意:给出m个区间,要求构造一个长度为n的数字序列,序列内全是正整数,且每个给定的区间内无重复数字。构造出一个字典序最小的满足条件的序列。

题解:被大区间包含的小区间没意义,不用管。剩下的区间要么部分重叠,要么互不交叉。排个序后用搞个堆维护当前能用的数字即可。

1007 Chiaki Sequence Revisited

题意:给出一个数列a的方程a_n=\begin{cases}1 & n = 1,2 \\ a_{n - a_{n-1}} + a_{n-1 - a_{n-2}} & n \ge 3\end{cases},求前n个的和,n<=10^18

题解:打个表,写出前几项,1 1 2 2 3 4 4 4 5 6 6 7 8 8 8 8 9 10 10 11 12 12 12 13 14 14 15 16 16 16 16 16 17 18 18 19 20 20 20。发现有规律,一个数字x出现的次数是lowbit(x),就是它在二进制下最后一个1出现在第几位,在树状数组里用过。

根据这个规律,我们希望知道a[n]是哪个数字,好利用等差数列公式来求和。如果用二分,会发现二分的常数太大总的下来容易超时。

于是我直接把n/2,因为我发现a[n]总是大于n/2,之后再往后枚举,枚举次数并不比二分多,而且常数均摊下来很稳定。

1011 Time Zone

题意:貌似是个换时差的水题,赛后都说这题无聊,我就没管了2333

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值