1009: QAQ的区间价值 [思维]
时间限制: 1 Sec 内存限制: 128 MB提交: 117 解决: 71 统计
题目描述
QAQ有一个整数序列,元素个数有
N
个,分别为
1,2,3...N−1,N
。
假定用数组 a[] 来依次记录 N 个元素,那么区间 [i,j] 的价值 =sum(i,j)∗Check(i,j) 。
其中 sum(i,j)=∑jk=ia[k] ,表示区间 [i,j] 元素之和。
假定用数组 a[] 来依次记录 N 个元素,那么区间 [i,j] 的价值 =sum(i,j)∗Check(i,j) 。
其中 sum(i,j)=∑jk=ia[k] ,表示区间 [i,j] 元素之和。
Check(i,j)=(j−i+1) & 1?1:−1 ,表示区间长度为奇数返回 1 ,反之返回 −1 。
现在,QAQ想知道所有子区间的价值之和。
对于区间 [2,4] 而言,子区间有 6 个 [2,2],[2,3],[2,4],[3,3],[3,4],[4,4] 。
输入
第一行输入一个整数
T
,代表有
T
组测试数据。
每组数据占两行,第一行输入一个整数 N ,代表序列的元素个数。
注: 1<=T<=10000,1<=N<=100000 。
每组数据占两行,第一行输入一个整数 N ,代表序列的元素个数。
注: 1<=T<=10000,1<=N<=100000 。
输出
对每组测试数据,输出序列所有子区间价值之和。
样例输入
3
1
2
99
样例输出
1
0
2500
AC代码:
#include<stdio.h>
int main()
{
int t,n,m;
long long s;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
if(n%2==1)
{
m=(n+1)/2;
s=m*m;
}
else
s=0;
printf("%lld\n",s);
}
return 0;
}