Problem G: 我是好人2
Description
众所周知,我是好人,不会出太难的题,题意简单得很,给定L,R,N,K,问存在多少个数X满足以下条件:
1:L <= X <= R
2:X % N == K
总共T(<=100000)组数据,每组数据的数字都是不超过1000000000的正整数.
Input
第一行组数T,第二行依次输入L,R,N,K,由1个空格间隔开
Output
只输出一行答案
Sample Input
31 1000000 1 01 1000000 2 01 1000000 3 1
Sample Output
1000000500000333334
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
#include<algorithm>
int main()
{
//{ freopen("Input.txt","r",stdin);
// freopen("abcd.txt","w",stdout);
long long test;
scanf("%lld",&test);
while(test--)
{
long long i,l,r,j,n,k,sbr,sbl,count=0;
scanf("%lld%lld%lld%lld",&l,&r,&n,&k);
sbl=-1;
sbr=-1;
if(n<=k)
{
printf("0\n");
continue;
}
if(k==0)
{
printf("%lld\n",(r)/n-(l-1)/n);
continue;
}
if(l%n==k)
{
sbl=l;
}
else
{
if(l%n>k)
{
sbl=(l/n+1)*n+k;
}
else
sbl=l+(k-l%n);
}
if(r%n==k)
{
sbr=r;
}
else
{
if(r%n<k)
{
sbr=(r/n-1)*n+k;
}
else
{
sbr=r-(r%n-k);
}
}
// printf("%lld %lld \n",sbl,sbr);
if(sbl<sbr)
printf("%lld\n",(sbr-sbl)/n-1+2);
else if(sbl==sbr)
{
printf("1\n");
}
else
{
printf("0\n");
}
}
}
/**************************************************************
Problem: 1144
User: 516108736
Language: C++
Result: Accepted
Time:104 ms
Memory:1776 kb
****************************************************************/
本文深入探讨了一个数学竞赛题目,即在给定范围内找到符合条件的数的数量。通过详细解释如何利用模运算的性质来简化问题,并提供了一种高效的求解策略,该策略不仅适用于该特定问题,而且可以广泛应用于类似数论问题的解决。通过实例分析,展示了如何通过合理选择变量和应用数学技巧,快速得出答案。

被折叠的 条评论
为什么被折叠?



