Skip to content

1062: Smart Game

Problem Description

Solution in Java

/**
 * @author Teerapat Phokhonwong
 * @Onlinejudge: URI Online Judge
 * @Problem: 1897 Smart Game
 * @Link: https://www.urionlinejudge.com.br/judge/en/problems/view/1897
 * @Timelimit: 2 sec
 * @Status: Accepted 2/1/16, 10:21:54 PM Runtime:0.656s
 * @Solution: Queue and memory Executed task
 */
package  URI.Accepted.DATA_STRUCTURES_AND_LIBRARIES.sourcecode;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.LinkedList;

public class P1897_Smart_Game {

    static LinkedList<Integer> task = new LinkedList<Integer>(), next = new LinkedList<Integer>();
    static HashMap<Integer, Integer> memory = new HashMap<Integer, Integer>();

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] st = br.readLine().split(" ");
        int n = Integer.parseInt(st[0]);
        int m = Integer.parseInt(st[1]);
        if (n == m) {
            System.out.println(0);
            System.exit(0);
        }

        boolean changed = false;
        int round = 0;
        task.add(n * 2);
        task.add(n * 3);
        task.add(n / 3);
        task.add(n / 2);
        task.add(n + 7);
        task.add(n - 7);

        memory.put(n * 2, 0);
        memory.put(n * 3, 0);
        memory.put(n / 2, 0);
        memory.put(n / 3, 0);
        memory.put(n + 7, 0);
        memory.put(n - 7, 0);
        while (!changed) {
            while (task.size() != 0) {
                int sum = task.remove();
                if (sum == m) {
                    changed = true;
                    break;
                }
                if (memory.get(sum * 2) == null) {
                    next.add(sum * 2);
                    memory.put(sum * 2, 0);
                }

                if (memory.get(sum * 3) == null) {
                    next.add(sum * 3);
                    memory.put(sum * 3, 0);
                }

                if (memory.get(sum / 2) == null) {
                    next.add(sum / 2);
                    memory.put(sum / 2, 0);
                }

                if (memory.get(sum / 3) == null) {
                    next.add(sum / 3);
                    memory.put(sum / 3, 0);
                }

                if (memory.get(sum + 7) == null) {
                    next.add(sum + 7);
                    memory.put(sum + 7, 0);
                }

                if (memory.get(sum - 7) == null) {
                    next.add(sum - 7);
                    memory.put(sum - 7, 0);
                }

            }
            task.addAll(next);
            next = new LinkedList<Integer>();
            round++;
        }
        System.out.println(round);
    }

}