Untitled

 avatar
unknown
java
2 years ago
9.0 kB
3
Indexable
//Klaara's Forest
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

class Point {
    int x;
    int y;

    Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

class Fortress {
    Point[] array;
    int front;
    int rear;

    Fortress(int size) {
        array = new Point[size];
        front = -1;
        rear = -1;
    }
}

public class MaxThiefTime {

    private static void initQueue(Fortress q) {
        q.front = -1;
        q.rear = -1;
    }

    private static boolean isEmpty(Fortress q) {
        return q.front == -1;
    }

    private static void enqueue(Fortress q, Point p) {
        if (isEmpty(q)) {
            q.front = 0;
            q.rear = 0;
        } else {
            q.rear++;
        }
        q.array[q.rear] = p;
    }

    private static Point dequeue(Fortress q) {
        Point p = q.array[q.front];
        if (q.front == q.rear) {
            q.front = -1;
            q.rear = -1;
        } else {
            q.front++;
        }
        return p;
    }

    private static int max(int a, int b) {
        return (a > b) ? a : b;
    }

    private static int min(int a, int b) {
        return (a < b) ? a : b;
    }

    private static int maxThiefTime(int m, int n, int[][] fortress) {
        int[][] directions = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
        int placementlelo = 0;

        int bfs(int start_x, int start_y) {
            boolean[][] visited = new boolean[MAX_M][MAX_N];
            int[][] distance = new int[MAX_M][MAX_N];
            Fortress q = new Fortress(MAX_M * MAX_N);
            initQueue(q);
            Point start = new Point(start_x, start_y);
            enqueue(q, start);
            visited[start_x][start_y] = true;

            while (!isEmpty(q)) {
                Point p = dequeue(q);
                for (int i = 0; i < 4; i++) {
                    int nx = p.x + directions[i][0];
                    int ny = p.y + directions[i][1];
                    if (nx >= 0 && nx < m && ny >= 0 && ny < n && !visited[nx][ny] && fortress[nx][ny] == 0) {
                        distance[nx][ny] = distance[p.x][p.y] + 1;
                        visited[nx][ny] = true;

                        Point newPoint = new Point(nx, ny);
                        enqueue(q, newPoint);
                    }
                }
            }
            return distance[m - 1][n - 1];
        }

        int distance = bfs(0, 0);
        placementlelo = distance;

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (fortress[i][j] == 0) {
                    fortress[i][j] = 1;
                    distance = bfs(0, 0);
                    placementlelo = max(placementlelo, distance);
                    fortress[i][j] = 0;
                }
            }
        }

        return placementlelo + 1;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int m = scanner.nextInt();
        int n = scanner.nextInt();
        int[][] fortress = new int[MAX_M][MAX_N];

        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                fortress[i][j] = scanner.nextInt();
            }
        }

        int result = maxThiefTime(m, n, fortress);
        System.out.println(result);
    }
}

//ROI
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.Tuple;

public class StockAnalysis {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();
        List<Tuple<Integer, Integer, Integer>> stocks = new ArrayList<>();

        for (int i = 0; i < n; ++i) {
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            int c = scanner.nextInt();
            stocks.add(new Tuple<>(a, b, c));
        }

        int m = scanner.nextInt();
        int real = 0, unreal = 0;
        List<List<Integer>> placementlelo = new ArrayList<>();

        for (int i = 0; i < n; ++i) {
            List<Integer> arr = new ArrayList<>();
            for (int j = 0; j < m; ++j) {
                arr.add(scanner.nextInt());
            }
            placementlelo.add(arr);
        }

        int day = scanner.nextInt();

        for (int i = 0; i < n; ++i) {
            int a, b, c;
            Tuple<Integer, Integer, Integer> stock = stocks.get(i);
            a = stock.getFirst();
            b = stock.getSecond();
            c = stock.getThird();

            if (b > day) {
                continue;
            } else if (c > day || c == 0) {
                unreal += a * (placementlelo.get(i).get(day - 1) - placementlelo.get(i).get(b - 1));
            } else {
                real += a * (placementlelo.get(i).get(c - 1) - placementlelo.get(i).get(b - 1));
            }
        }

        System.out.println(real);
        System.out.println(unreal);
    }
}

//X from Y
import java.util.Arrays;
import java.util.Scanner;

public class Main {

    static int[][] dp;

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String x = scanner.next();
        String y = scanner.next();
        int s = scanner.nextInt();
        int r = scanner.nextInt();

        dp = new int[10001][10001];
        for (int i = 0; i < dp.length; i++) {
            Arrays.fill(dp[i], -1);
        }

        int ans = solve(s, r, x, y);
        if (ans == 1e9) {
            System.out.println("Impossible");
            return;
        }

        System.out.println(ans);
    }

    static int f(int i, int j, int s, int r, String x, String y, String y1) {
        if (i > j) return 0;
        if (dp[i][j] != -1) return dp[i][j];

        int mini = 1e9;
        for (int k = i; k <= j; k++) {
            if (y1.contains(x.substring(i, k + 1))) mini = Math.min(mini, r + f(k + 1, j, s, r, x, y, y1));
            if (y.contains(x.substring(i, k + 1))) mini = Math.min(mini, s + f(k + 1, j, s, r, x, y, y1));
        }

        return dp[i][j] = mini;
    }

    static int solve(int s, int r, String x, String y) {
        String y1 = new StringBuilder(y).reverse().toString();
        return f(0, x.length() - 1, s, r, x, y, y1);
    }
}

//Lucky
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {

    private static String toggle(String num) {
        StringBuilder result = new StringBuilder();
        for (char bit : num.toCharArray()) {
            if (bit == '0') {
                result.append('1');
            } else {
                result.append('0');
            }
        }
        return result.toString();
    }

    private static Pair<Integer, List<Integer>> getMaxSum(List<Integer> arr, int k) {
        int maxIndex = arr.indexOf(arr.stream().max(Integer::compare).orElseThrow());
        int left = Math.max(0, maxIndex - k);
        int right = Math.min(arr.size() - 1, maxIndex + k);

        List<Integer> selected = new ArrayList<>(arr.subList(left, maxIndex + 1));
        selected.addAll(arr.subList(maxIndex, right + 1));

        arr.removeIf(x -> selected.contains(x));

        int sum = selected.stream().mapToInt(Integer::intValue).sum();

        return new Pair<>(sum, arr);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Integer> arr = new ArrayList<>();

        while (scanner.hasNextInt()) {
            arr.add(scanner.nextInt());
        }

        String a1 = scanner.next();
        String b1 = scanner.next();
        String a2 = scanner.next();
        String b2 = scanner.next();

        int k = scanner.nextInt();
        int sum1 = 0, sum2 = 0;

        while (!arr.isEmpty()) {
            Pair<Integer, List<Integer>> result1 = getMaxSum(new ArrayList<>(arr), k);
            sum1 += result1.getFirst();

            if (arr.isEmpty()) {
                break;
            }

            Pair<Integer, List<Integer>> result2 = getMaxSum(new ArrayList<>(arr), k);
            sum2 += result2.getFirst();
        }

        if (sum1 > sum2) {
            a1 = toggle(a1);
            b2 = toggle(b2);
        } else {
            a2 = toggle(a2);
            b1 = toggle(b1);
        }

        int xor1 = Integer.parseInt(a1, 2) ^ Integer.parseInt(b1, 2);
        int xor2 = Integer.parseInt(a2, 2) ^ Integer.parseInt(b2, 2);

        if (xor1 > xor2) {
            System.out.println("Rahul");
        } else if (xor2 > xor1) {
            System.out.println("Rupesh");
        } else {
            System.out.println("both");
        }
    }

    static class Pair<T, U> {
        private final T first;
        private final U second;

        Pair(T first, U second) {
            this.first = first;
            this.second = second;
        }

        T getFirst() {
            return first;
        }

        U getSecond() {
            return second;
        }
    }
}
Editor is loading...
Leave a Comment