• 信息学奥赛一本通 2074:【21CSPJ普及组】分糖果(candy) | 洛谷 P7909 [CSP-J 2021] 分糖果


    【题目链接】

    ybt 2074:【21CSPJ普及组】分糖果(candy)
    洛谷 P7909 [CSP-J 2021] 分糖果

    【题目考点】

    1. 数学

    取模运算

    【解题思路】

    只要篮子中有大于等于n颗糖,就要分走n颗糖。最后剩下的归自己的糖的数量一定小于n。这似乎是在做取模运算。
    取糖果最少l个,最多r个,这是个连续整数构成的区间。
    我们先考察一个连续整数构成的区间的内整数对n取模的结果的规律(即除以n的余数)

    整数x01n-1nn+12n-12n
    x%n01n-101n-10

    m是某个正整数

    整数xmnmn+1mn+n-1(m+1)n(m+1)n+1(m+1)n+n-1(m+2)n
    x%n01n-101n-10

    可以看到,x%n的值始终是从0变到n-1,再从0变到n-1。
    下图横轴为x,纵轴为x%n,n为6时的示例情况
    在这里插入图片描述

    其中,x%n的值每“段”从0变到n-1,都满足x/n的值是不变的。

    比如x从 m ⋅ n m\cdot n mn变化到 m ⋅ n + n − 1 m\cdot n+n-1 mn+n1,x/n的值始终是m,而x%n的值从0变化到n-1

    • 如果给定的l与r整除n的值是相同的,即l/n == r/n,那么说明l与r在同一“段”中,x是这一段中的数字。根据上述规律,x从l变化到r的过程中,x%n的值是逐渐增大的,当x为r时,x%n的值最大,为r%n
      下图横轴为x,纵轴为x%n,L,R为满足该描述的一种可能的情况
      可能的一种情况

    • 如果给定的l与r整除n的值是不同的,即l/n != r/n,那么从l到r范围内一定存在一个数字x%n为n-1,一定存在一个数字x%n为0。n-1就是l到r范围内的数字对n取模能得到的最大值。
      下图横轴为x,纵轴为x%n,L,R为满足该描述的一种可能的情况在这里插入图片描述

    【题解代码】

    解法1:
    #include
    using namespace std;
    int main()
    {
    	int n, l, r;
    	cin >> n >> l >> r;
    	if(l/n == r/n)
    		cout << r%n;
    	else
    		cout << n-1;
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    竞赛 基于深度学习的行人重识别(person reid)
    C#堆排序算法
    五笔字根
    DEDE织梦标签名称:{/dede:arclist} 详解
    Avalonia踩坑
    新能源汽车行业资讯-2022-9-19
    Liunx修改IP地址后可能会遇到的问题
    ccc强制性认证是什么?
    [密码学入门]仿射密码(Affine)
    Mysql 8手动终止某个事务并释放其持有的锁
  • 原文地址:https://blog.csdn.net/lq1990717/article/details/133279732