Novo post! Dessa vez resolvendo um exercício matemático do BEECROWD. Veja abaixo as soluções em C e C++ para o exercício "Nem Tudo é Greve Versão Hard".
Plataforma: URI (BEECROWD)
Problema: 2986
Linguagens: C e C++
Solução: Como nesse exercício o resultado pode ser muito grande, utilizei o tipo long long, que usa no mínimo 64 bits. Com base no que pede o enunciado, preenchi um array como se fosse uma tabela (fiz uma espécie de memoização) que baseia o valor no resto da divisão do primo favorito (10^9 + 7) pela soma dos três valores anteriores na tabela, valores estes que já são conhecidos, pois já foram preenchidos. No início os três valores valem 1, 1 e 2, respectivamente. Após preencher a tabela até a posição n, basta acessar o valor com índice n no array.
Código em C:
#include <stdio.h>
#define PRIMO 1000000007 int main() { int n, i; scanf("%d", &n); long long r[n + 1]; r[0] = 1; r[1] = 1; r[2] = 2; for (i = 3; i <= n; i++) r[i] = (r[i-1] + r[i-2] + r[i-3]) % PRIMO; printf("%llu\n", r[n]); return 0; }
#include <iostream> #define PRIMO 1000000007 using namespace std; int main() { int n; cin >> n; long long r[n + 1]; r[0] = 1; r[1] = 1; r[2] = 2; for (int i = 3; i <= n; i++) r[i] = (r[i-1] + r[i-2] + r[i-3]) % PRIMO; cout << r[n] << endl; return 0; }
Nenhum comentário:
Postar um comentário