Uoj Test Round3,有生之年系列的比赛

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zxin__/article/details/78614704

UOJ好久没有过比赛了,上次可能已经是UNR2了,依稀记得那场我只参加了day2,然后被T1计数题卡死,写了一个70分暴力,还爆零了(事后把一个2改成1,就70了,再加上前缀和优化,就AC了,然而这是T1)
比赛传送门
官方题解传送门
这次比赛的T1是计算几何,初看挺水的,然后一开始没有很专心写。慢悠悠的写完后发现死活过不了样例,原来是算法错了,一个蓝点在(另外两个红点+原点构成的三角形)中,并不等价于这个蓝点被夹在中间,对于蓝点到原点的距离也有要求。然后改了下代码,又发现了诸如const int pi=acos(-1);(应当使用double),atan2(x,y)(应为atan2(y,x),第一个参数是纵坐标,比较奇特),之类的错误,心态有点崩。
中途强迫自己看了下后两题,感觉T2可以维护每个区间的残余物,然后用线段树+(二分哈希/后缀数组)来求答案,T3并没有看懂。
终于过完T1样例后,只剩70分钟了去看T2,感觉想了一会,可能可以使用猫树,然后对于当前的分治中点,向左向右分别用主席树维护栈的哈希值。
还剩不到一小时的时候开码,最后样例过不去(事后发现是我把vector下标当作从1开始),强行爆OJ,居然CE了,不服,又爆了一发,继续CE,这垃圾UOJ,看我把示范程序交上去,终于不CE了。
最后惊喜的发现,这场比赛的获奖条件竟是,倒数第二发CE的提交者,感觉真是excting,可能比拿rk1还刺激。


(接下来是做T3的经历,与比赛经历无关)
结束后看了下T3,感觉第二,三操作很像FWT,于是打了波表,看看有什么规律,无果。
今天花了一个上午来深刻理解FWT。
先来看看FWT的兄弟FFT。DFT后得到的数组,意义是明确的,就是对应的点值。
再看看FWT的or形式,其实就是类似高维前缀和的东西, Ai=j|i==iaj
那么FWT的xor形式,得到的数组,究竟是什么呢?
定义 F(x,y) 等于x和y按位与得到的数,二进制下一的个数,的奇偶性(奇为-1,偶为1)
然后把数组a进行FWT(xor版)得到的数组A,其实就是 Ai=2n1j=0F(i,j)aj
回到原题,将原数组通过操作二(类似于FWT),再进行操作一,得到的返回值t,有什么性质呢?
因为 At 不等于零,所以 F(t,x)==F(t,y) (x,y即题面里的x,y)
所以 F(t,xy)==1 (这是F函数的性质,题解原话“根据 F2 下的乘法分配律也就是 (xy)t=0 ”)。
由此可以引申出很多算法,高斯消元也行,暴力枚举答案也行,题解有更详细的介绍。
据说这场的三道交互题被爆了,然后现在又修好了?一个比较有意思的是,爆交互得到的返回结果是“When there is a cheater, he must have no girlfirend.
Don’t cheat!”

猜你喜欢

转载自blog.csdn.net/zxin__/article/details/78614704