2020牛客暑期多校训练营第七场
比赛链接
https://ac.nowcoder.com/acm/contest/16151?&headNav=www
D. Fake News
题意
输入一个数\(n\),问你\(\begin{aligned}\sum_{i=1}^n i^2\end{aligned}\) 是不是一个完全平方数。
数据范围
\(10^6\)组输入
\(n\lt 10^{15}\)
题解
前缀和为\(\frac{n\cdot(n+1)\cdot(2n+1)}{6}\), 由于\(n\),\(n+1\),\(2n+1\)两两互质,所以他们排除掉\(2\)和\(3\)这两个因子以后是完全平方数。直接验证这个就可以了。
H. Dividing
题意
- (1,k)合法
- 如果(n,k)合法,则(n+k,k)合法
- 如果(n,k)合法,则(nk,k)合法
输入\(N\),\(K\), 问你有多少组\(1\le n\le N,1\le k\le K\)合法。
题解
显然每个\(k\)都是独立的。
考虑n的k进制,很容易发现第一句话说的是\(1\)合法,第二句话说的是合法的数加上\(10\)合法,第三句话说的是合法的数左移一位合法。
所以很容易发现,只要最低位为0或者1,就是合法的。
然后就是一个分块的模版题了。计算\(\begin{aligned}\sum_{i=1}^K \sum_{j=1}^N [j\mod i\le 1]\end{aligned}\)
1 |
|
B. Mask Allocation
题意
给你\(n\times m\)个口罩,你可以对口罩进行分组,要求分组后可以在不拆开组的情况下,分配给n个医院。每个医院m个口罩,也可以分配给m个医院,每个医院n个口罩。
数据范围
\(100\)组输入
\(1\le n,m \le 10^4\)
题解
不妨考虑\(n<m\), 那么我们直接分出n个n,那么后面剩余\(n\times m-n\times n\)个口罩,要求可以分成\(m-n\)个n,以及n个\(m-n\),注意到出现了子问题。所以递归解决。