看到a[i]<=100000覺得應該從這個方面搞。
如果a[x]沒出現過,f[x]=f[x-1]*2;否則f[x]=f[x-1]*2-f[pos[a[x]]-1];ans=f[n]-1,然後wa了 ?
修改了一下f[x]=f[x-1]*2+1 否則f[x]=f[x-1]*2-f[pos[a[x]]-1];ans=f[n];
#include#include#include#includeusing namespace std;1202 子串行個數#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define clr(x,c) memset(x,c,sizeof(x))
int read()
const int nmax=1e5+5;
const int mod=1e9+7;
int a[nmax],dp[nmax];
int main()
printf("%d\n",dp[n]);
return 0;
}
基準時間限制:1 秒 空間限制:131072 kb 分值: 40 難度:4級演算法題
收藏關注子串行的定義:對於乙個序列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
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例如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的不同子串行...