题解:P15090 [UOI 2025 II Stage] Movies

· · 题解

前言

下文的【思路】、【解法】、【注意事项】和【代码】均采用 C++23 的标准。

洛谷题目

注:为了不引发歧义,这里所有的用于改变优先级的括号都使用小括号。

解法

根据小学就学过的除法,我们可以设:n \div k = a \cdots b,这里我们要取的是最后一页,即 b,写出 b = n \bmod k,接着每部电影 c 分钟,共计 c(n \bmod k),然后你就会得到76 pts。

这个做法会在 k \mid n 的时候被卡,显然这个时候最后一页应该是 k 个电影,而经过这份计算,得到的却是 0 个电影,显然不对,这个时候特判一下,答案即为

\boxed{\begin{cases}k & k \mid n \\ n \bmod k & k \nmid n\end{cases}=((n-1) \bmod k) + 1}

这里最后的常见恒等变型此处不多赘述。

代码

int n, k, c;

signed main() {
    ios::sync_with_stdio(false), ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr); clock_t timr_start = clock();

    read(n, k, c);
    write(((n+k-1) % k + 1) * c);

    cerr << "time use " << (clock() - timr_start) << "ms.";
    return 0;
}