子串行的定義:對於乙個序列a=a[1],a[2],......a[n]。則非空序列a'=a[p1],a[p2]......a[pm]為a的乙個子串行,其中1<=p1例如4,14,2,3和14,1,2,3都為4,13,14,1,2,3的子串行。對於給出序列a,有些子串行可能是相同的,這裡只算做1個,請輸出a的不同子串行的數量。由於答案比較大,輸出mod 10^9 + 7的結果即可。
input
第1行:乙個數n,表示序列的長度(1 <= n <= 100000)output第2 - n + 1行:序列中的元素(1 <= a[i] <= 100000)
輸出a的不同子串行的數量mod 10^9 + 7。input示例
412output示例32
13
這個是輸出不同子串行的數量,dp[x]表示第x位結尾的不同的子串行個數。如果這個數之前沒有出現過,那麼顯然有dp[x]=dp[x-1]*2+1 (之前的序列加上這個元素或者不加這個元素,還有乙個自己)
如果這個數出現過了,那麼還是之前的序列 加上或者不加這個元素,即dp[x-1]*2這塊還是要有的。
然後就是要刪除這個元素最後出現的那個dp[pos[val[x]]],這一部分是之前序列以這個元素結尾的個數,算重複了,所以要扣掉。
#include#include#include#includeusing namespace std;
typedef long long ll;
const int n = 100005;
const ll mod = 1e9 + 7;
int val[n], pos[n];
ll dp[n];
int main()
printf("%lld\n", dp[n]);
} return 0;
}
51nod 1202 子串行個數
子串行的定義 對於乙個序列a a 1 a 2 a n 則非空序列a a p1 a p2 a pm 為a的乙個子串行,其中1 p1例如4,14,2,3和14,1,2,3都為4,13,14,1,2,3的子串行。對於給出序列a,有些子串行可能是相同的,這裡只算做1個,請輸出a的不同子串行的數量。由於答案比...
51Nod1202 子串行個數
子串行的定義 對於乙個序列a a 1 a 2 a n 則非空序列a a p1 a p2 a pm 為a的乙個子串行,其中1 p1 p2 pm n。例如4,14,2,3和14,1,2,3都為4,13,14,1,2,3的子串行。對於給出序列a,有些子串行可能是相同的,這裡只算做1個,請輸出a的不同子串行...
51nod 1202 子串行個數
子串行的定義 對於乙個序列a a 1 a 2 a n 則非空序列a a p1 a p2 a pm 為a的乙個子串行,pi屬於1.n。例如4,14,2,3和14,1,2,3都為4,13,14,1,2,3的子串行。對於給出序列a,有些子串行可能是相同的,這裡只算做1個,請輸出a的不同子串行的數量。由於答...