「JoyOI1091」等差数列
题目描述
等差数列的定义是一个数列S,它满足了(S[i]-S[i-1]) = d (i> 1)。显然的一个单独的数字或者两个数字也可以形成一个等差数列。 经过一定的学习小C发现这个问题太简单了,等差数列的和不就是(Sn+S1)*n/2?因为这个问题实在是太简单了,小C不屑于去解决它。这让小C的老师愤怒了,他就找了另外一个问题来问他。 小C的老师给了他一个长度为N的数字序列,每个位置有一个整数,他需要小C帮他找到这个数字序列里面有多少个等差数列。 …… 这个问题似乎太难了,小C需要你的程序帮他来解决这个问题。
输入
第一行一个整数N,表示老师给出的数字序列的长度。 第二行有N个整数A[i],表示数字序列每个数字的大小。
输出
输出只有一行一个整数,表示这个序列中的等差数列的个数(mod 9901)。
样例输入
5 1 4 2 3 7
样例输出
17
提示
对于30%的数据,N < = 100 对于70%的数据,N < = 500 对于100%的数据,N < = 1000;-500 < = A[i] < = 500
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include <iostream> using namespace std; int ans,n,a[1001],f[1001][2001]={0}; int main() { int i,j,d; cin>>n; for (i=1;i<=n;i++) cin>>a[i]; ans=n; for (i=1;i<=n;i++) { for (j=1;j<=i-1;j++) { d=1000+a[i]-a[j]; f[i][d]+=f[j][d]+1; ans+=(f[j][d]+1); ans%=9901; } } cout<<ans; return 0; } |
Subscribe