抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

比赛地址

C - Stones

题意

给定一个只由 .# 组成的字符串 \(S\),你可以修改若干字符使得不存在子串 #.。求最少修改次数。

\(|S|\le 2\times 10^5\)

题解

显然最后 \(S\) 一定是形如 ...### 的。求出前缀 # 的数量和后缀 . 的数量后枚举分界线计算即可。

时间复杂度 \(O(|S|)\)

代码

D - Three Colors

题意

\(N\) 个整数 \(A_i\),将每个数染成红、绿、蓝三种颜色,记红、绿、蓝的数之和分别为 \(R,G,B\),求使得 \(R,G,B\) 能组成一个面积为正数的三角形的染色方案数。对 \(998244353\) 取模。

\(N\le 300,A_i\le 300\)

题解

\(S\) 为所有数之和,那么染色方案合法当且仅当 \(R,G,B < \frac{S}{2}\)

考虑容斥,用背包计算方案数即可。

时间复杂度 \(O(NS)\)

代码

E - Polynomial Divisors

题意

给定一个多项式 \(f(x)=\sum_{i=0}^{N}a_ix^i\),求出所有的质数 \(p\) 满足对于任意整数 \(x\),都有 \(p\mid f(x)\)

\(N\le 10^4,a_i\le 10^9\)

题解

假设已经确定 \(p\),考虑判断是否合法。根据费马小定理,当 \(x\not\equiv 0\pmod{p}\) 时,有 \(x^a\equiv x^{a\bmod (p-1)}\pmod{p}\),那么我们可以将原多项式化为以下形式: \[ f(x)=\sum_{i=0}^{p-2}b_ix^i \]

那么 \(p\) 合法的充要条件是对于所有 \(0\le i < p-1\),有 \(b_i\equiv 0\pmod{p}\)。充分性显然,必要性证明如下:

因为对于所有 \(0\le x < p\),都有 \(f(x)\equiv 0\pmod{p}\),相当于给定了多项式的 \(p\) 个点值 \((x,0)\)。由于 \(p\) 个点值可以唯一确定一个小于 \(p\) 次的多项式,而显然这个多项式一定是所有系数全 \(0\) 的多项式,所以必然有 \(b_i\equiv 0\pmod{p}\)

于是我们枚举所有 \(N\) 以内的质数和所有系数的 \(\gcd\) 的质因子作为 \(p\) 进行判断即可。

时间复杂度 \(O(N(\pi(N)+\log a_i))\),其中 \(\pi(N)\) 表示 \(N\) 以内质数数量。

代码

F - Banned X

题意

求只包含 \(0,1,2\) 的,长度为 \(N\) 的,满足以下条件的序列数量:

  • 不包含和为 \(X\) 的连续子序列。

\(998244353\) 取模。

\(N\le 3000\)

题解

\(f_{i,j}\) 表示长度为 \(i\),和为 \(j\) 的方案数。\(j < X\) 可以直接转移,而 \(j=X\) 则一定为 \(0\)。接下来考虑 \(j > X\) 的情况。

注意到此时因为总和大于 \(X\),若我们对该序列作前缀和,那么一定存在相邻两个前缀和分别为 \(X-1\)\(X+1\),假设位置为 \(k\)\(k+1\)。此时第一个数和第 \(k+1\) 个数一定是 \(2\),所以第 \(2\) 个数和第 \(k+2\) 个数也一定是 \(2\)……我们可以推出 \(k+1\)\(n\)\(1\)\(n-k\) 这些数都是 \(2\)

那么有 \(2(n-k)=j-(X-1)\),我们可以唯一确定这个 \(k\)。于是就可以确定中间未填部分的长度与和,直接转移即可。

时间复杂度 \(O(N^2)\)

代码

评论