耐心题 广东oj新生赛“我是好人2”

来源:互联网 发布:怎么清理mac上的内存 编辑:程序博客网 时间:2024/04/28 18:36

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


0 0
原创粉丝点击