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

考场上唯一 A 的题,T3 因为没写返回值造成的差异爆掉了。

题意简述

在开区间 (l,r) 取一个数 x 使得 xmodn 的最大。

思路

很容易想到暴力,把 lr 全扫一遍就行,得分 70

但是可以发现,在 (l,r) 这一段里,只有两种情况:

  • 包含一个 x 使得 n 可以整除 x
  • 如果不包含那么 r 一定是最大的,因为 (l,r) 中若没有 x|n 那么这一段中每一个数 modn 的值一定递增并在 r 处达到段内的顶峰。

所以我们可以检查 l+(nlmodn1) 的值(即使得 modn=n1 最小的 x)是否在区间内,如果是可以直接输出 n1,否则输出 rmodn

AC 代码

#include <bits/stdc++.h>
using namespace std;
int n,l,r;
int main(){
	cin>>n>>l>>r;
	int k=l%n;
	if(l+(n-1-k)<=r){
		cout<<n-1<<endl;//情况1
	}
	else{
		cout<<r%n<<endl;//情况2
	}
	return 0;
}
posted @   Shunpower  阅读(574)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示