HPU1012: QAQ的区间统计【找规律】

来源:互联网 发布:南京旅游攻略 知乎 编辑:程序博客网 时间:2024/04/28 20:08

1012: QAQ的区间统计

时间限制: 1 Sec  内存限制: 128 MB
提交: 155  解决: 50
[提交][状态][讨论版]

题目描述

QAQ有一个区间[L, R]。已知QAQ很喜欢长度为奇数的区间,现在请你告诉他有多少个长度为奇数的子区间。
对于区间[2 4]来讲,它的子区间有[2 2] [2 3] [2 4] [3 3] [3 4] [4 4]共6个。
为了简化题目,QAQ所给的区间里面全是非负整数。

输入

第一行输入一个整数T,代表有T组测试数据。
每组数据输入两个整数L,R,代表区间的端点。

注:1 <= T <= 1000000,0 <= L <= R <= 100000000。

输出

对每组测试数据,输出一个整数代表长度为奇数的子区间个数。

样例输入

21 61 5

样例输出

12
注意:L和R都可能等于10^8,当程序中出现两数相乘或者相加的结果超int的时候,L和R就不能用int存,要用long long;一定要注意这个问题,否则会出错;
代码:
#include<stdio.h>int main(){int t;long long l,r;scanf("%d",&t);while(t--){long long sum=0;scanf("%lld%lld",&l,&r);long long t=r-l+1;if(t%2==0){int m=t/2;sum=m*(2+t)/2;}else{int m=t/2+1;sum=(1+t)*m/2;}printf("%lld\n",sum); } return 0; } 


代码2:因为没用long long,WA到死;
#include<stdio.h> int main() {     int t; long long L,R,n;     scanf("%d",&t);     while(t--)     {         long long ans=0;         scanf("%lld%lld",&L,&R);         if((R-L+1)%2==0)         {             n=(R-L+1)/2;         }         else        {             n=(R-L+1)/2+1;         }         ans=n*(R-L+1)-n*(n-1);         printf("%lld\n",ans);     }     return 0; } 


0 0
原创粉丝点击