当前位置: 代码迷 >> 综合 >> HPU1012: QAQ的区间统计【找规律】
  详细解决方案

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

热度:62   发布时间:2023-10-13 21:44:27.0

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。

输出

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

样例输入

2
1 6
1 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; 
}