Skip to main content
Original142 words1 min

题解:P7909 [CSP-J 2021] 分糖果

Summary

给正整数 n、L、R,求 k 从 L 到 R 时 k 模 n 的最大值。把区间按长度 n 分段,同一段内 k 模 n 随 k 递增、最大为 n-1。若 L 与 R 落在同一段,取 k 等于 R,答案为 R 模 n;否则区间至少跨越一段,必能取到某个模 n 为 n-1 的位置,答案为 n-1。

题意简述​

给定正整数 2≤n≤L≤R≤1092\le n\le L\le R\le 10^9,求:

max⁡k=LRk mod n\max_{k=L}^Rk\bmod n

解题思路​

将区间 [L,R][L,R] 划分为长度为 nn 的段,在同一段内 k mod nk\bmod n 单调递增,且最大值为 n−1n-1。

  • 若 ⌊Ln⌋=⌊Rn⌋\left\lfloor\frac{L}{n}\right\rfloor=\left\lfloor\frac{R}{n}\right\rfloor,说明 [L,R][L,R] 位于同一段内,取 k=Rk=R 时答案为 R mod nR\bmod n;
  • 否则,[L,R][L,R] 跨越至少一段,取 k=n⌊Rn⌋−1k=n\left\lfloor\frac{R}{n}\right\rfloor-1 时答案为 n−1n-1。

参考代码​

181 Bcpp
#include <bits/stdc++.h>
using namespace std;

int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n,l,r;
cin>>n>>l>>r;
cout<<(l/n==r/n?r%n:n-1)<<'\n';
return 0;
}