Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- /* Pegadinha: a questao avisa que nao vai estourar um int de 32 bits, mas nao fala "signed integer".
- * (o int normal soh suporta ateh 31 bits sem overflow)
- * Apos este detalhe, eh basicamente a simulacao mesmo, mas podemos guardar o resultado de calculos
- * anteriores para evitar retrabalho jah que os numeros se repetem muito.
- */
- using namespace std;
- int a, b, c, d, temp[1000001];
- int calc(unsigned int n){
- int retorno;
- if(n < 1000001 && temp[n]) return temp[n];
- if(n&1)
- retorno = calc(3*n +1);
- else
- retorno = calc(n >> 1);
- if(n < 1000001) return temp[n] = retorno+1;
- return retorno+1;
- }
- int main(){
- temp[1] = 1;
- while(scanf("%d %d", &a, &b) == 2){
- int maior = 0;
- if(a > b){
- c = b;
- d = a;
- }
- else{
- c = a;
- d = b;
- }
- for(int i = c; i <= d; ++i) if(calc(i) > maior) maior = temp[i];
- printf("%d %d %d\n", a, b, maior);
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment