1009: QAQ的區間價值 [思維]
時間限制: 1 Sec 內存限制: 128 MB提交: 110 解決: 67 統計
題目描述
假定用數組a[]a[]來依次記錄NN個元素,那麼區間[i,j][i,j]的價值=sum(i,j)∗Check(i,j)=sum(i,j)∗Check(i,j)。
其中sum(i,j)=∑jk=ia[k]sum(i,j)=∑k=ija[k],表示區間[i,j][i,j]元素之和。
Check(i,j)=(j−i+1)Check(i,j)=(j−i+1) & 1?1:−11?1:−1,表示區間長度爲奇數返回11,反之返回−1−1。
現在,QAQ想知道所有子區間的價值之和。
對於區間[2,4][2,4]而言,子區間有66個[2,2],[2,3],[2,4],[3,3],[3,4],[4,4][2,2],[2,3],[2,4],[3,3],[3,4],[4,4]。
輸入
每組數據佔兩行,第一行輸入一個整數NN,代表序列的元素個數。
注:1<=T<=10000,1<=N<=1000001<=T<=10000,1<=N<=100000。
輸出
樣例輸入
3
1
2
99
樣例輸出
1
0
2500
找規律的題。。。。
AC代碼:
/*
若爲偶數,則結果爲0
若爲奇數,則結果爲上一個奇數時的結果加上這個奇數
*/
#include<cstdio>
typedef long long LL;
LL a[100005];
int main()
{
LL T,N;
a[1]=1l;
for(LL i=2;i<=100005;i++)
{
if(i&1)
a[i]=a[i-2]+i;
else
a[i]=0;
}
while(~scanf("%lld",&T))
{
while(T--)
{
scanf("%lld",&N);
printf("%lld\n",a[N]);
}
}
return 0;
}