Página Principal

MC521-1s2014

MC621-2s2014

MC521-1s2015

MC621-2s2015

MC521-1s2016

Conteúdo

Área Reservada

edit sidebar

UVA 10718

Autor: Caique Garutti

#include <stdio.h>

int main() {
        unsigned long N,L,U;

        while (scanf("%ld %ld %ld",&N,&L,&U) != EOF) {
                unsigned long result = 0;
                for (int i = 31; i >= 0; i--) {
                        unsigned long current = (1u<<i);
                        // exceeded upper limit
                        if ((result|current) > U) {
                                continue;
                        }
                        // if we don't mark this bit, will exceed lower limit
                        if ((result|current) -1 < L) {
                                result|=current;
                                continue;
                        }
                        // confortable with boundaries, checking N
                        if ((N|current)>N) {
                                result |= current;
                        }
                        /*unsigned long teste = (N|current);
                        if (teste > N) {
                                result |= current;
                        }*/

                }
                printf("%ld\n",result);
        }

        return 0;
}