File tree 1 file changed +51
-0
lines changed
1 file changed +51
-0
lines changed Original file line number Diff line number Diff line change
1
+ // https://programmers.co.kr/learn/courses/30/lessons/86054
2
+ // dp
3
+ #include < string>
4
+ #include < vector>
5
+ #include < set>
6
+ #include < map>
7
+ #include < stdio.h>
8
+ #define ll long long
9
+ #define pii pair<int ,int >
10
+ using namespace std ;
11
+ int d[200011 ];
12
+ const int mod = 1e9 + 7 ;
13
+ map<ll,int > mp[200011 ];// Y,len
14
+ int solve (vector<int > &b) {
15
+ int n = b.size ();
16
+ d[0 ] = 1 ;
17
+ for (int i = 1 ; i < n; ++i) {
18
+ d[i] = d[i - 1 ];
19
+ ll X = b[i];
20
+ int len = 1 ;
21
+ int l;
22
+ while (1 ) {
23
+ l = i - len;
24
+ if (l <= 0 ) break ;
25
+ if (mp[l][X] == 0 ) break ;
26
+ len += mp[l][X];
27
+ int cnt = d[i-len];
28
+ d[i] += cnt;
29
+ d[i] %= mod;
30
+ X += X;
31
+ mp[i][X] = len;
32
+ }
33
+ mp[i][b[i]] = 1 ;
34
+ // printf("%d:%d\n",i,d[i]);
35
+ }
36
+ for (int i = 1 ; i < n; ++i) mp[i].clear ();
37
+ return d[n-1 ];
38
+ }
39
+ vector<int > solution (vector<int > a, vector<int > s) {
40
+ vector<int > answer;
41
+ vector<int > b; int i = 0 ;
42
+ for (auto len : s) {
43
+ b = { -1 };
44
+ for (int j = 0 ; j < len; ++j) {
45
+ b.push_back (a[i+j]);
46
+ }
47
+ answer.push_back (solve (b));
48
+ i += len;
49
+ }
50
+ return answer;
51
+ }
You can’t perform that action at this time.
0 commit comments