Skip to content

Commit a06f845

Browse files
committed
Long Update
1 parent 2986cb8 commit a06f845

File tree

2 files changed

+10
-16
lines changed
  • 1-Codeforces/Live contests/Round 673 Div 3

2 files changed

+10
-16
lines changed
-136 Bytes
Binary file not shown.

1-Codeforces/Live contests/Round 673 Div 3/F.cpp

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
#define rrep(i,b,c) for(i=b; i>=c; --i)
1717

1818
#define PI 3.14159265
19-
#define M 998244353
19+
#define M (int)1000000007
2020
#define LINF LONG_MAX
2121
#define INF INT_MAX
2222

@@ -29,27 +29,21 @@ void solve(void) {
2929
string s;
3030
cin >> n >> s;
3131

32-
int dp[n + 1][3] = {};
32+
int dp[3] = {}; int len=1;
3333

3434
for (int i = 1; i <= n; ++i) {
35-
dp[i][0] = dp[i - 1][0];
36-
dp[i][1] = 2 * dp[i - 1][1];
37-
dp[i][2] = 2 * dp[i - 1][2];
3835

39-
if (s[i - 1] == 'a') dp[i][0]++;
40-
else if (s[i - 1] == 'b') dp[i][1] += dp[i][0];
41-
else if (s[i - 1] == 'c') dp[i][2] += dp[i][1];
36+
if (s[i - 1] == 'a') dp[0] = (dp[0]+len)%M;
37+
else if (s[i - 1] == 'b') dp[1] = (dp[1] + dp[0])%M;
38+
else if (s[i - 1] == 'c') dp[2] = (dp[2] + dp[1])%M;
4239
else {
43-
dp[i][2] += dp[i - 1][1];
44-
dp[i][1] += dp[i - 1][0];
45-
dp[i][0]++;
40+
dp[2] = (3 * dp[2] + dp[1])%M;
41+
dp[1] = (3 * dp[1] + dp[0])%M;
42+
dp[0] = (3 * dp[0] + len)%M;
43+
len= (3*len)%M;
4644
}
4745
}
48-
49-
for (int i = 0; i <= n; ++i) {
50-
cerr << dp[i][0] << " " << dp[i][1] << " " << dp[i][2] << endl;
51-
}
52-
cout << dp[n][2] << endl;
46+
cout << dp[2] << endl;
5347

5448
}
5549

0 commit comments

Comments
 (0)