3 条题解

  • 0
    @ 2025-2-23 11:14:30
    #include<bits/stdc++.h> 
    using namespace std; 
    int L,R,n; 
    int main() 
    { 
    	scanf("%d%d%d",&n,&L,&R); 
    	int x1,x2,x3; 
    	x1=L/n; 
    	x2=(x1+1)*n; 
    	if(x2<=R) 
    	cout<<n-1; 
    	if(x2>R) 
    { 
    	x3=max(L%n,R%n); 
    	cout<<x3; 
    } 
    	return 0; 
    }
    • 0
      @ 2024-10-14 23:29:51

      #include<bits/stdc++.h> using namespace std; int L,R,n; int main() { scanf("%d%d%d",&n,&L,&R); int x1,x2,x3; x1=L/n; x2=(x1+1)*n; if(x2<=R) cout<<n-1; if(x2>R) { x3=max(L%n,R%n); cout<<x3; } return 0; }

      • 0
        @ 2024-10-2 21:51:45

        从题意可知:在分发后如果少于 n 块那么剩下的就全部作为奖励,所以理论上最大的奖励数量就是n – 1。很自然地,你就会想到这个就是个取模/取余的操作嘛!那么题解其实就变成了:求在L到R的范围内对n取模的最大值。枚举一下就可以得到轻松得到最大值了,不过呢,某些个测试数据是在10^9级别的,所以用循环的常规操作就会超时,这部分分值就拿不到了。读题时要对数据范围敏感。我们只要观察所给数据 L,R(L<=R),假设对所给数据L对n取模得m, 取d = R - L为偏移量(R对n取模即为m在完全剩余系循环上的偏移),对m+d分两种情况: 若他们同处于n-1左侧,则取m+d即为最大奖励数; 若m, m+d横跨过n-1则最大值即是 n-1。

        • 1

        信息

        ID
        588
        时间
        1000ms
        内存
        256MiB
        难度
        8
        标签
        递交数
        37
        已通过
        5
        上传者