Skip to content

Commit e136efc

Browse files
authored
dp
1 parent 1690fa8 commit e136efc

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

programmers/안티세포.cpp

+51
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
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+
}

0 commit comments

Comments
 (0)