讨论下,是不是这样的,我最后没提交上去 #include <iostream> #include <vector> #include <string> using namespace std; int count_route(int M, bool equal) { vector<int> dp(M + 1); dp[0] = 1; int cur = 1; int f = 0; for (int i = 1; i <= M; i++) { cur *= 2; dp[i] = f; f = cur - dp[i]; } if (equal) return dp[M]; else return (cur - dp[M])/2; } int main() { int N, M, K; cin >> N >> M >> K; string str_src; string str_des; cin >> str_src; cin >> str_des; long long res = 1; for (int i = 0; i<N; i++) { char c_src = str_src[i]; char c_des = str_des[i]; int temp = count_route(M, c_src == c_des); if (temp == 0) { cout << 0 << endl; return 0; } else res *= temp; } cout << res % 1000000007 << endl; return 0; }