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
****************************************************************/