Shell Necklace
题目连接:
http://acm.hdu.edu.cn/showproblem.php?pid=5730
Description
Perhaps the sea‘s definition of a shell is the pearl. However, in my view, a shell necklace with n beautiful shells contains the most sincere feeling for my best lover Arrietty, but even that is not enough.
Suppose the shell necklace is a sequence of shells (not a chain end to end). Considering i continuous shells in the shell necklace, I know that there exist different schemes to decorate the i shells together with one declaration of love.
I want to decorate all the shells with some declarations of love and decorate each shell just one time. As a problem, I want to know the total number of schemes.
There are multiple test cases(no more than 20 cases and no more than 1 in extreme case), ended by 0.
For each test cases, the first line contains an integer n, meaning the number of shells in this shell necklace, where 1≤n≤105. Following line is a sequence with n non-negative integer a1,a2,…,an, and ai≤107 meaning the number of schemes to decorate i continuous shells together with a declaration of love.
Output
For each test case, print one line containing the total number of schemes module 313(Three hundred and thirteen implies the march 13th, a special and purposeful day).
3
1 3 7
4
2 2 2 2
0
Sample Output
14
54
Hint

For the first test case in Sample Input, the Figure 1 provides all schemes about it. The total number of schemes is 1 + 3 + 3 + 7 = 14.
题意
题解:
推出显然的公式
\(dp[i]= \sum_{j=0}^{i-1}(dp[j]*a[i-j])\)
也就是分治fft的经典形式
cdq(l,r)先算出前一半的真实dp值,后一半加上前一半的贡献,再递归后一半
每次操作为区间长度*log,总的复杂度nloglog
代码
//#include <bits/stdc++.h>
#include <stdio.h>
#include
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <limits.h>
#include
#include
#include
#include
#include