Day 3: IQ test by kefaa2, antontrygubO_o, and gepardo¶
排名 | 当场过题数 | 至今过题数 | 总题数 |
---|---|---|---|
17/90 | 7 | 8 | 13 |
A¶
solved by YZW
题意¶
题解¶
B¶
solved by JLK&YZW
题意¶
给定长度为\(n\)的序列\(a\),常数\(k\)和\(w\)。
每次询问把\(a\)里的一个元素永久改动,然后把\(a\)从小到大排序得到\(b\)序列,
求\(\sum\limits_{i=1}^n \lfloor \frac{b_i\times i^k}{w}\rfloor\)。
\(1 \le n,q \le 10^5,1 \le k,w \le 5\)。
题解¶
直接维护\(b\)序列。每次相当于改一个数,然后把这个数移动到对应位置。先想如何用平衡树维护。
考虑\(w=1\)的情况,如何维护\(\sum b_i\times i^k\)。在平衡树上,每次Up操作,左儿子的值不变,对于右儿子里的点,把\(b_i\times i^k\)变成\(b_i \times (i+x)^k\)。这可以二项式展开,每个点维护子树内所有点的\(\sum b_i\times i^P,0 \le P \le k\)即可。
再考虑整除的影响。如果能求出\(\sum ( b_i\times i^k \mod w)\),那么整除就可以看做是\(\frac {\sum (b_i \times i^k)-\sum ( b_i\times i^k \mod w)}{w}\)。
注意到模\(w\)之后,\(b_i\times i^k\)的值只和\(b_i\mod w,i\mod w\)两个值有关。由于\(w\)很小,有一种暴力维护的方法。就是每个点记录一个\(w\times w\)的矩阵,\((x,y)\)表示子树内\(i \mod w=x,b_i \mod w=y\)的位置的个数。Up的时候左儿子仍然不变,右儿子相当于是每一行循环移动了\(siz[lc]\)次,可以\(O(w^2)\)处理。
最后答案就是把第一个点记录的值处理一下即可。
\(O((n+q)(k^2+w^2)\log n)\)
C¶
**upsolved by **
题意¶
题解¶
D¶
upsolved by TYB
题意¶
给一个数组\(\{a_n\}\),\(n\)为偶数,\(\forall i\in[1,n], a_i=i\)。每次可以删除相邻的两个数\(x,y\),花费为\(cost[x][y]\),给出所有奇数和偶数间的\(cost\),且保证\(cost\)是\([1,\frac{n^2}{4}]\)的一个排列,求一种删除所有数的方案,使过程中的最大花费最小,输出这个花费。
\(n\le4000\)
题解¶
容易想到\(\mathcal{O}(n^3)\)的区间DP做法,这个做法的瓶颈在于转移,考虑如何优化。考虑用类似dijkstra的处理方法,从一个已有的状态去转移到其它没有被转移过的状态,那么这一定是最优的。假设当前我们的状态是\([l,r]\),考虑如何用\(f[l][r]\)转移到其它。首先是\(f[l][r]->f[l-1][r+1]\),当\(f[l][r]>cost[l-1][r+1]\)可以转移,否则可能有更优的解。然后就是\(f[l][r]\)作为左区间或者右区间转移,即\(f[l][r]->f[l][k](k>r)\)或\(f[l][r]->f[k][r](k<l)\)。以前者为例,那么我们要找到的\(k\)满足下列条件:1、\(f[l][k]\)没被转移。2、\(f[r+1][k]\)已被转移。找这个可以用bitset
维护每个端点作为左/右端点,还有哪些点有/没有被转移过,每次与一下就好了。至于遍历bitset
中的\(1\),可以用_Find_first
函数找到第一个\(1\),用 _Find_next
函数实现找到下一个\(1\)。
\(\mathcal{O}(\frac{n^3}{64})\)。
E¶
solved by YZW
题意¶
题解¶
F¶
solved by YZW
题意¶
题解¶
G¶
solved by JLK&TYB
题意¶
一个\(n\)个点的完全图,每条边是两种颜色之一。对于每个四个点的子图,如果只有一条边和其它边不同色,那么称其为A的。如果三条边相同颜色,另外三条边也是相同颜色,并且没有同色三角形,那么称其为Y的。求Y的数量-A的数量。
\(1 \le n \le 2000\)
题解¶
比较奇妙的题,有点容斥思想。
枚举两个对角点\(a,c\),用bitset算出满足\(ab,bc\)同色且和\(ac\)不同的\(b\)的数量\(x\)。\(\sum C_x^2\)是这种情况下4条边同色的四元环数量的两倍以及4条边和一条对角线同色的四元环(也就是A)数量之和\(a\)。
枚举两个对角点\(a,c\),用bitset算出对于两种\(ab\)颜色的情况,分别满足\(ab,bc\)不同色的\(b\)的数量\(x,y\)。\(\sum x\times y\)是这种情况下4条边同色的四元环数量的四倍以及对边2条边和一条对角线同色的四元环数量(也就是Y)的两倍之和\(b\)。前者是因为可以把四元组扭转一下,就变成了外面四条边同色。
答案即为\(\frac b2-a\)。可以画图感受一下。
\(O(\frac {n^3}{64})\)
H¶
solved by YZW
题意¶
题解¶
I¶
**upsolved by **
题意¶
题解¶
J¶
**upsolved by **
题意¶
题解¶
K¶
**upsolved by **
题意¶
题解¶
L¶
**upsolved by **
题意¶
题解¶
M¶
solved by YZW
题意¶
题解¶
记录¶
开局YZW写M(0:04)A(0:13)F(1:03)E(1:30)。
JLK和TYB讨论G,然后过了(2:54)。
YZW写H,WA一次PE一次后AC(3:32)。
还剩BDJ可做,还剩40min左右YZW突然会B了,JLK写,WA一次后AC(4:52)。
总结¶
JLK: 欺负人没有IQ?
TYB:感觉构造题做得不太好,可以练一练。
Dirt¶
B(-1)
H(-2)