【hpu oj 1009 QAQ的區間價值 思維】

點擊打開鏈接

1009: QAQ的區間價值 [思維]

時間限制: 1 Sec 內存限制: 128 MB

提交: 110 解決: 67 統計

題目描述

QAQ有一個整數序列,元素個數有NN個,分別爲123...N1N1,2,3...N−1,N
假定用數組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)=(ji+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]

輸入

第一行輸入一個整數TT,代表有TT組測試數據。
每組數據佔兩行,第一行輸入一個整數NN,代表序列的元素個數。
注:1<=T<=100001<=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;
 } 





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章