151022的测试总结

3 篇文章 0 订阅
1 篇文章 0 订阅

第一题

【题目及题号】异或 superoj948
【题解】
性质一:当x为偶数时,x^(x+1) = 1;
所以可以根据k进行分类讨论。
(一)当k >= 4时
①r-l+1>4
直接输出连续的四个数(x为偶数,x,x+1,x+2,x+3);异或和为0;
②r-l+1=4
枚举(2^4)-1种情况求最小。
(二)当k < 4时
①k = 1直接输出左界l;
②k = 2
(1)r-l+1>2 输出连续的两个数(x为偶数,x,x+1);异或和为1;
(2)r-l+1=2 判断l和(l^r)的大小;
③k = 3
这是最难的一种情况,答案一定不会超过1。所以我们可以只考虑能否找到一组使答案为零的解。
设选的三个数为x,y,z(x < y < z),首先三个数的二进制不可能拥有同样的最高位(否则最高位一定有1)。
那么设z = 2^k+c,y = 2^k+b;(x < 2^k)则有b^c^x = 0;
为了让x,y,z都在[l,r]之间,所以需要让x尽量大,z尽量小(c尽量小,即x>=c)。
假设x>=2^(k-1),则有z>=2^(k-1)+2^k,让z最小则取z = 2^k+2^(k-1);
x尽量大所以取x = 2^k-1;
z = 1100000……;
x = 0111111……;
求得
y = 1011111……;
y = z - 1;

至于x小于2^k的情况我们可以通过让z,y变成2^(k-1)来转化成同一个问题。
现在就可以枚举k看是否存在解了。

【考试ING】
考试的时候觉得这个题最难,想出来了除了k=3以外的所有情况。
对于k=3的情况想到了高位补1和三个数高位不相同的性质

之所以没有想出来大概是因为除了二进制没有把它转成数学公式来限制范围。Orz。数学推导多么重要,没了它我会死。Orz。

第二题

【题目及题号】树 superoj949
【题解】
本题需要求sigma(d(u,v))(u!=v),树上任意两点之间的距离和。如果分别考虑起点和终点是至少O(n^2)的复杂度,是不可接受的。所以考虑转化。
既然是求边权的和,那么自然就可以直接考虑每条边会出现多少次。明显一条边会被使用的次数=它左边的点数*它右边的点数*2;(因为本题的点对无序,所以要乘二)。
现在的问题就变成了:如何求一条边左边的点和右边的点数量?
把树画出来这个问题就非常简单了。
这里写图片描述
如图所示,当前边左边的点明显就是它从父亲连向的儿子节点所在子树的size,右边的点就是(n-size)。
最后一边dfs就可以解决所有问题。

注意:开long long。

【考试ING】
我反正觉得这个题没有什么难度,至于标算推的什么lca啦……好麻烦啊有空再看好了。

提醒自己一点,毫无头绪的时候画个图就什么都清楚了。

第三题

【题目及题号】玩具 superoj950
【题解】
注意两个性质:
1、平板无限长,宽度只有w。
2、滑块只能被平移不能被旋转。
根据性质一,我们就可以只考虑木块两两之间的关系(因为我们可以把其他木块都移到无穷远处)再考虑性质二,两个木块的宽度是固定的。当要求改变两个木块的相对位置的时候,两个木块的高度就成了限制条件。所以当且仅当存在两个木块的宽度加在一起大于w且要求交换相对位置时无解(如图)。现在就可以O(n^2)验证了。
这里写图片描述
【考试ING】
当时推出这个题的结论的时候其实我是不敢相信出题人会把如此水题放T3的,还是要相信自己啊Orz。

注意一个地方就是,题目没有提到的保证尽量考虑,但是在会影响常数大小(时间复杂度)的时候最好就分块吧。
本题因为懒得删多余代码导致常数大T了10分。好心疼Orz。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值