NC21302 被3整除的子序列

#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define endl "\n"
using namespace std;
typedef long long LL;
const int MOD = 1e9 + 7;
int n;
char s[100];
LL f[100][3];
int main() {
	IOS;
    cin >> s + 1;
    n = strlen(s + 1);
    f[1][(s[1] - '0') % 3] = 1;
    for (int i = 2; i <= n; i ++ ) {
        int p = (s[i] - '0') % 3;
        f[i][p] = (f[i][p] + 1) % MOD;
        for (int j = 0; j < 3; j ++ ) 
            f[i][j] = (f[i][j] + f[i - 1][j] + f[i - 1][((j - p) % 3 + 3) % 3]) % MOD;
    }
    cout << f[n][0] << endl;
 	return 0;
}
posted @ 2022-03-06 23:53  Angels_of_Death  阅读(30)  评论(0)    收藏  举报