[SPOJ 6694] Playing with Marbles 題解

這道題是讓你求第 \(n+1\) 個五邊形數,多組數據。ios

樓上已經給出了 \(O(n+t)\) 的解法,可是這個解法太不優秀了。spa

考慮 \(O(t)\) 通項公式解。code

如今手動推一下,很明顯, \(f_1=1,f_n=f_{n-1}+3n-2\)ci

我不滿意,這樣一次詢問的複雜度就是 \(O(n)\) 的了!io

仔細觀察,而後嘗試對差分求出前綴和,對於每一個詢問 \(O(1)\) 解決,用通項公式表達爲 \(f_n=\frac{n(3n-1)}{2}\).class

而後咱們就能夠求出第 \(n+1\) 個五邊形數了。stream

代碼太簡單了,但仍是貼一下.數據

#include <iostream>
using namespace std;
int main(){
	while(1){
		int n;
		cin>>n;
		if(n==0)return 0;
		n+=1;
		cout<<n*(3*n-1)/2<<endl;
	}
}
相關文章
相關標籤/搜索