最近发现总结和回顾特别重要,因为每次练习赛的时候肯定都是做自己会做的题目,如果一直赶着做练习赛,结果就是会做的题目更加熟练而已,不会做的还是不会做。
再次广告一下,SGU的题目真是好呀真是好!
====
NEERC Southern Subreginal 2007 对应SGU题号346-357
水题,模拟即可。
将字符串排序,比较函数为x+y<y+x。
主要是关注1的个数。
比如a=101100。那么就是找101100,100111,100011各自的循环最小,然后取这些循环最小的最大值。不知道怎么证明,纯粹是打表+yy的。
很难说清除,具体可以看代码。
按照极角排序后就转成一个线性问题了:在数轴上放置点,有一些区间不能放,问最少放多少个点使得每条线段(狼)上至少有一个点。
显然就是贪心,尽量往右边放。所以把羊按左端点排序合并处理出不能打枪的区间,然后把狼按右端点排序贪心打枪就行了。也可以两部分同时做(我就是同时做的)。
构造。设有一组解{a[1], a[2], ..., a[N]},那么{a[1] xor P, a[2] xor P, ..., a[N] xor P}同样是满足方程组的一组解。
那么不妨设a[1]=0。关注下面一组方程:
a[1] xor a[x] = b[i]
a[1] xor a[y] = b[j]
a[x] xor a[y] = b[k]
注意到有b[i]^b[j] = b[k]。找出一个这样的三元组(i, j, k),就得到了a[x] = b[i], a[y] = b[j]。然后就可以得到剩下的所有数了。
很变态的几何题,好像要三分什么的,至今不会做。