diff --git a/decode-ways/decode-ways-tutorial.pdf b/decode-ways/decode-ways-tutorial.pdf index ac776e4..3f7e73f 100644 Binary files a/decode-ways/decode-ways-tutorial.pdf and b/decode-ways/decode-ways-tutorial.pdf differ diff --git a/decode-ways/decode-ways.pdf b/decode-ways/decode-ways.pdf index d7e5c82..17c437b 100644 Binary files a/decode-ways/decode-ways.pdf and b/decode-ways/decode-ways.pdf differ diff --git a/decode-ways/decode-ways.tex b/decode-ways/decode-ways.tex index 8f5f8ba..c4e1001 100644 --- a/decode-ways/decode-ways.tex +++ b/decode-ways/decode-ways.tex @@ -18,6 +18,8 @@ A segunda linha contém uma sequência de digitos de \( s \) de comprimento \( n A saída deve conter um único inteiro, representando o número total de maneiras possíveis de decodificar a sequência numérica \( s \) de acordo com o mapeamento \( 1 \rightarrow A, 2 \rightarrow B, \ldots, 26 \rightarrow Z \). +Como este número pode ser extremamente grande, sua resposta deve ser calculada e impressa \textbf{módulo \(10^9 + 7\)}. + \ExemploEntrada \begin{Exemplo} \texttt{2} & \texttt{2}\\ diff --git a/decode-ways/output/109 b/decode-ways/output/109 index 689d05f..2317127 100644 --- a/decode-ways/output/109 +++ b/decode-ways/output/109 @@ -1 +1 @@ -1298777728820984005 +782204094 diff --git a/decode-ways/output/6 b/decode-ways/output/6 index de22d67..82fafb3 100644 --- a/decode-ways/output/6 +++ b/decode-ways/output/6 @@ -1 +1 @@ -1836311903 +836311896 diff --git a/decode-ways/src/TLE.cpp b/decode-ways/src/TLE.cpp index e7ab352..245a522 100644 --- a/decode-ways/src/TLE.cpp +++ b/decode-ways/src/TLE.cpp @@ -3,7 +3,9 @@ typedef long long ll; using namespace std; -int ways(string &s, int n, int idx = 0) +const int MOD = 1e9 + 7; + +ll ways(string &s, int n, int idx = 0) { if (idx > n) return 1; @@ -14,11 +16,13 @@ int ways(string &s, int n, int idx = 0) if (idx + 1 < n) { int num = stoi(s.substr(idx, 2)); - if (num >= 10 && num <= 26) + if (num >= 10 && num <= 26){ count += ways(s, n, idx + 2); + count %= MOD; + } } - return count; + return count % MOD; } vector used; diff --git a/decode-ways/src/ac.cpp b/decode-ways/src/ac.cpp index 40cac3c..8bd0000 100644 --- a/decode-ways/src/ac.cpp +++ b/decode-ways/src/ac.cpp @@ -3,6 +3,8 @@ typedef long long ll; using namespace std; +const int MOD = 1e9 + 7; + ll numDecodings(string s) { if (s[0] == '0') @@ -36,15 +38,17 @@ ll numDecodings(string s) if (current != '0') { dp[i][0] = dp[i - 1][0] + dp[i - 1][1]; + dp[i][0] %= MOD; } int code = stoi(aux); if (10 <= code && code <= 26) { dp[i][1] = dp[i - 2][0] + dp[i - 2][1]; + dp[i][1] %= MOD; } } - return dp[N][0] + dp[N][1]; + return (dp[N][0] + dp[N][1]) % MOD; } int main() diff --git a/decode-ways/src/alternative-ac2.py b/decode-ways/src/alternative-ac2.py index 58cd5e9..1a432c7 100644 --- a/decode-ways/src/alternative-ac2.py +++ b/decode-ways/src/alternative-ac2.py @@ -13,4 +13,4 @@ for i in range(1, n + 1): if 10 <= two_digit <= 26: dp[i] += dp[i - 2] -print(dp[n]) \ No newline at end of file +print(dp[n] % 1000000007) \ No newline at end of file diff --git a/decode-ways/src/alternative_ac.cpp b/decode-ways/src/alternative_ac.cpp index ed6c711..2fe25c5 100644 --- a/decode-ways/src/alternative_ac.cpp +++ b/decode-ways/src/alternative_ac.cpp @@ -3,6 +3,8 @@ typedef long long ll; using namespace std; +const int MOD = 1e9 + 7; + ll numDecodings(string s) { if (s[0] == '0') @@ -20,12 +22,14 @@ ll numDecodings(string s) if (current != '0') { next = dp2; + next %= MOD; } int code = stoi(aux); if (10 <= code && code <= 26) { next += dp1; + next %= MOD; } swap(dp1, dp2); swap(dp2, next); diff --git a/decode-ways/statement/output.tex b/decode-ways/statement/output.tex index 5bbc861..be7ac45 100644 --- a/decode-ways/statement/output.tex +++ b/decode-ways/statement/output.tex @@ -1 +1,3 @@ A saída deve conter um único inteiro, representando o número total de maneiras possíveis de decodificar a sequência numérica \( s \) de acordo com o mapeamento \( 1 \rightarrow A, 2 \rightarrow B, \ldots, 26 \rightarrow Z \). + +Como este número pode ser extremamente grande, sua resposta deve ser calculada e impressa \textbf{módulo \(10^9 + 7\)}. \ No newline at end of file