第一场多校,因为高铁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的方程,求前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