VP

希望寒假能打满 10 场。

Educational Codeforces Round 120 (Rated for Div. 2)

4:6 rk 830

A 排个序乱搞下就好了。

B 我给学弟们做过一道类似的题,两边都排序即可。典中典。

C 猜了个贪心,从小到大排序,第一个减,然后其他赋值为第一个,发现花费是单谷的,写了个三分。

D 是本质不同的序列计数问题。也就是极长线段的并。

经典容斥例题,线段交,本质不同

计蒜客

这 2 道题都是找出每个符合条件的极长区间,与上一个相交的区间减去交集的全排列得到本质不同的排列,因为我们先每个区间都贡献了一次,而中间部分会在 2 边都算了一次。那么就能得到当前本质不同的。因为都是当前本质不同的去交一个新的区间,所以只要考虑前一个与当前的关系即可。

E 赛后想了下,肯定是指数做法。考虑绝对值拆掉,状压下 \(|a-b|=a-b \ or \ b-a\),考虑极大和极小。给对应的添加一个正一或者负一的系数,然后按此系数排序赋值即可。

AtCoder Beginner Contest 236

过了 A,B,C,D,F

D 的剪枝一时间想不到,钦定只能前面选后面的即可。

F 线性基板子,从小到大排序即可。

E 赛时想到问题 1,大致就是二分平均值,然后对于每个 \(a'_i=a_i-lim\),去做相邻的数必须选 1 个的总和最大的 dp。

问题 2 的话也是类似,考虑二分中位数,不难发现中位数合法当且仅当选的数中大于等于中位数的个数多于小于的个数。然后对于每个 \(a'_i=a_i\ge k?1:-1\),做一遍跟上面一样的 dp 即可。

G 的话,暴力矩乘 \(O(\dfrac{Tn^3\log L}{w})\),就是每次加入边。不难发现,对于一条路径能通,当且仅当时间到了这条路径的边的最大编号,所以做 1 遍就好了。

暴力的话是定义 \(res[i][j]|=(f[i][k]\&g[k][j])\)

正解的话 \(res[i][j]=\min\{\max(f[i][k],g[k][j])\}\)

显然二者都满足结合律,故矩乘正确。

Codeforces Round #768 (Div. 2)

主要是 D,考虑对于 \(x\) 二分最小的 \(y\) 满足条件,当且仅当 \(:[x,y]\ge:otherwise+k\),理性理解一下。

Codeforces Round #766 (Div. 2)

(Educational Codeforces Round 122 (Rated for Div. 2)

A,B,C,D 都比较套路。E 对于每 2 条边找出排序后相对顺序变化的分界点暴力做即可。

abc238

C 模拟+等差数列求和。

D 不难发现 \(s\ge a\),且 \((s-2a )\& a=0\) ,因为考虑选的 2 个数一定是 \(a\) 的超集,那么剩下的那些一定不能与 \(a\) 有交。

E 考虑从前缀和角度,那么能确定当且仅当 \(sum[n]\) 能确定。考虑前缀和确定了 \(sum[l-1]\),又知道和,那么就能确定 \(sum[r]\),所以 \(n\) 应该是通过一些边与 0 连起来的。并查集即可。该问题还可以转化为能否确定每个 \(a_i\),即 \(\forall i\in[1,n],find(i)=find(0)\)

G 就是 SB 莫队,考虑质因子并不是很多,应该是在 \(\log\) 级别的,所以复杂度正确。加个奇偶排序和去掉
#define int long long
就过了。

F 很有趣,一开始想到记录 \(dp[i][j][p][q]\) 表示当前到了 i,选了 j 个数,两个限制条件的最小值。发现应该是 1 个的。不太会。看了眼题解,发现按第一维排序,限制第二维即可。

AtCoder Beginner Contest 212

除了手速慢点都好。

E 喵喵喵!

对于限制事实上都能想到不能建图,只是说 \(x\) 的后面不能走到 \(y\) 而已。那就是诈骗题了。给了一堆限制,形似 \((x,y)\) 表示生成序列中 \(x\) 的后面不能是 \(y\),dp 即可。

然后限制的条件不是平方级别的,所以可以通过总的减去不合法的来转移。

F 暴力不难想。

发现假如坐上第 \(i\) 班公交,那么之后的路径都是固定的,可以倍增加速跳的过程。

G 喵喵喵!

考虑用 \(P\) 的原根表示所有数,那么 \((x,y)\) 合法就是 \((g^a)^n \equiv g^b \pmod{P},x\equiv g^a,y\equiv g^b\)

那么 \(g^{an\%(P-1)} \equiv g^{b\%(P-1)} \pmod{P}\),那么 \(an\equiv b \pmod{P-1}\),那么考虑枚举 \(a\)\(n\),则 \(an \equiv a \pmod{P}\) 那就不合法了。显然最后一个合法的是 \(an\equiv 0\pmod{P-1}\),那么 \(n=\dfrac{lcm(a,P-1)}{a}=\dfrac{(P-1)}{\gcd(a,P-1)}\)

那么 \(ans=\sum_{i=1}^{P-1} \dfrac{P-1}{\gcd(i,P-1)}\)

直接求难求。

以下的 \(P\) 为上文的 \(P-1\)

考虑式子里的一定是 \(P\) 的约束,我们令 \(d=\dfrac{P}{(i,P)}\),那么 \(\dfrac{P}{d}=(i,P)\),那么考虑对于 \(d\),求出 \(\sum [(i,P)=\dfrac{P}{d}]\),就是它的贡献系数。化开不难发现技术 \(\varphi(d)\)。根号求即可。

H 就这?就这?

容斥,FWT 等比数列求和,特判。

AtCoder Beginner Contest 213

E 01bfs

F 后缀树,\(len[lcp]\) 一定会等于祖先各个的本质不同子串(后缀树上),因为考虑祖先是子孙的后缀,所以长度从小到大连续,所以从祖先贡献下来即可。

G 子集 dp,考虑 \(f[s]\)\(s\) 这个点集构成联通的图方案数,发现并不好转移,但可以容斥,\(f[s]=2^{cnt[s]}-\sum_{T\subseteq S} 2^{cnt[S-T]}f[T]\),即选择一个联通块,然后让他与其他部分孤立。但是,其他部分乱连也可能形成联通块,导致重复贡献。有个 trick,就是可以直接选定一个点,然后我们只考虑这个点所在的联通块与其他的孤立,这样就不会重复了。即 \(f[s]=2^{cnt[s]}-\sum_{pos\in T,T\subseteq S} 2^{cnt[S-T]}f[T]\),计算答案的话就枚举有 \(i\) 点的集合 \(S\)\(f[S]*2^{cnt[all-S]}\),因为 2 者孤立,并不会算重。

H 直接 dp 比较好想,\(f[i][j]\) 为当前在 \(i\) 点,走了 \(j\) 公里的方案,\(f[x][j]=\sum_{k=0}^j f[y][k]*cnt[e(y,x)][j-k]\),发现是个半在线卷积,分治 NTT 即可。

ABC214

E,F 水。

G 不会。

H,看题解。

https://atcoder.jp/contests/abc232

posted @ 2022-02-08 17:13  FxorG  阅读(543)  评论(0编辑  收藏  举报