这道题是让你求第 \(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; } }