File tree Expand file tree Collapse file tree 2 files changed +10
-16
lines changed
1-Codeforces/Live contests/Round 673 Div 3 Expand file tree Collapse file tree 2 files changed +10
-16
lines changed Original file line number Diff line number Diff line change 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) {
2929string s;
3030cin >> n >> s;
3131
32- int dp[n + 1 ][ 3 ] = {};
32+ int dp[3 ] = {}; int len= 1 ;
3333
3434for (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 ;
4239else {
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
You can’t perform that action at this time.
0 commit comments