Skip to content

1772: Bit Shuffling

Problem Description

Solution in Java

/**
 * @author Teerapat Phokhonwong
 * @Onlinejudge: URI Online Judge
 * @Problem: 1772 Bit Shuffling
 * @Link: https://www.urionlinejudge.com.br/judge/en/problems/view/1772
 * @Status: Accepted 24/10/2015 - 01:40:16 Runtime:0.616s
 * @Solution:
 */
package  URI.Accepted.AD_HOC.sourcecode;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class P1772_Bit_Shuffling {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String line = "";
        while ((line = br.readLine()) != null) {
            if (line.equals("0 0")) {
                break;
            }
            String[] st = line.split(" ");
            long number = Long.parseLong(st[0]);
            int permutations = Integer.parseInt(st[1]);
            long max = number, min = number, res = number;
            int[] number32bit = base2(number);
            for (int i = 0; i < permutations; i++) {
                String[] st2 = br.readLine().split(" ");
                int index1 = Integer.parseInt(st2[0]);
                int index2 = Integer.parseInt(st2[1]);
                if (number32bit[31 - index1] != number32bit[31 - index2]) {
                    int temp = number32bit[31 - index1];
                    number32bit[31 - index1] = number32bit[31 - index2];
                    number32bit[31 - index2] = temp;
                    res = base10(number32bit);
                    if (res > max) {
                        max = res;
                    }
                    if (res < min) {
                        min = res;
                    }
                }

            }
            System.out.println(res + " " + max + " " + min);
        }
    }

    static int[] base2(long number) {
        int[] base2 = new int[32];
        int count = 31;
        for (long n = number, i = 31; n > 0; n /= 2) {
            long r = n % 2;
            base2[count] = (int) r;
            count--;
        }
        return base2;
    }

    static long base10(int[] base2Arr) {
        long base10 = 0;
        for (int i = 31; i >= 0; i--) {
            base10 += base2Arr[i] == 1 ? Math.pow(2, 31 - i) : 0;
        }
        return base10;
    }

}