Задача A. Java.PrimeNumberGenerator

Входной файл:Стандартный вход   Ограничение времени:5 сек
Выходной файл:Стандартный выход   Ограничение памяти:600 Мб

Условие

Необходимо реализовать класс PrimeNumberGenerator — генератор простых чисел

У класса должен быть конструктор, принимающий start, и функция GetNextPrime, возвращающая ближайшее справа от start-а простое число (включая start)

Функция GetNextPrime должна изменять состояние объекта — при повторном ее вызове нужно возвращать уже следующее простое число

      
        public class PrimeNumberGenerator 
        {
            PrimeNumberGenerator(int start) { ... }
            int GetNextPrime() { ... }
        }
      
  

Формат выходных данных

Файл с решением должен содержать только реализацию описанного класса


Задача B. Java.FiniteField

Входной файл:Стандартный вход   Ограничение времени:1 сек
Выходной файл:Стандартный выход   Ограничение памяти:512 Мб

Условие

Необходимо реализовать класс Num

У класса должны быть:

Конструктор принимающий value и modulo

При этом если modulo == 0, value сохраняется без изменений, иначе value берется по модулю modulo

Конструктор копирования, который копирует только value, при этом modulo = 0

Функция-геттер getValue возвращающая value

Функция-геттер getModulo возвращающая modulo

      
        public class Num
        {
            Num(int value, int modulo) { ... }
            Num(Num num) { ... }
            int getModulo() { ... }
            int getValue() { ... }
        }
      
  

Формат выходных данных

Файл с решением должен содержать только реализацию описанного класса


Задача C. Java.FiniteField.Hard

Входной файл:Стандартный вход   Ограничение времени:1 сек
Выходной файл:Стандартный выход   Ограничение памяти:512 Мб

Условие

Необходимо реализовать класс Num

У класса должны быть:

Конструктор принимающий value и modulo

При этом если modulo == 0, value сохраняется без изменений, иначе value берется по модулю modulo

Конструктор копирования, копирующий оба поля

Функция Num plus(Num rhs) складывающая 2 числа, modulo результата при этом равно максимальному

Функция Num plus(int rhs) складывающая 2 числа, modulo результата при этом равно this.modulo

Функции разности: Num minus(Num rhs), Num minus(int rhs), результаты аналогично сложению

Функции умножения: Num mult(Num rhs), Num mult(int rhs), результаты аналогично сложению

Функция-геттер getValue возвращающая value

Функция-геттер getModulo возвращающая modulo

При всех операциях value берется по модулю modulo

      
      public class Num 
      {
        Num(int value, int modulo) { ... }
        Num(Num num) { ... }

        Num plus(Num rhs) { ... }
        Num plus(int rhs) { ... }

        Num mult(Num rhs) { ... }
        Num mult(int rhs) { ... }

        Num minus(Num rhs) { ... }
        Num minus(int rhs) { ... }

        int getModulo() { ... }
        int getValue() { ... }
      }
      
  

Пример теста

    
        Num a = new Num(5, 10);
        Num b = new Num(4, 15);
        Num c = a.mult(b);
        Num d = c.mult(5);
        req(c.getValue() == 5);
        req(c.getModulo() == 15);
        req(d.getValue() == 10);
        req(d.getModulo() == 15)
    
  

Формат выходных данных

Файл с решением должен содержать только реализацию описанного класса


Задача D. Скалярное произведение

Входной файл:Стандартный вход   Ограничение времени:4 сек
Выходной файл:Стандартный выход   Ограничение памяти:512 Мб

Условие

С помощью Java Stream API реализовать скалярное произведение двух векторов a(a1, a2, ..., ai, ..., aN) и b(b1, b2, ..., bi, ..., bN), используя следующий класс:


import java.math.*;
import java.util.*;
import java.util.stream.*;

public class Solution
{
  public static Optional<BigInteger> dot(Stream<Long> a, Stream<Long> b)
  {
    // Ваш код
  }
}
  

Формат входных данных

На вход вашей функции подаются два Stream целых чисел.

Формат выходных данных

Код решения должен содержать только класс Solution с реализацией функции dot. Он не должен ничего выводить.

Ограничения

1 ≤ N ≤ 106

 − 107 ≤ ai ≤ 107

 − 107 ≤ bi ≤ 107

Примеры тестов

Стандартный вход Стандартный выход
1
1
2
3
  
6
2
2
4 -2
1 2
  
0

Задача E. Групповые соревнования

Входной файл:Стандартный вход   Ограничение времени:3 сек
Выходной файл:Стандартный выход   Ограничение памяти:512 Мб

Условие

На соревнованиях по робототехнике участвует M команд, состоящих из одинакового количества человек P.

Каждый участник команды ответственен в определенной компетенции и может получить от 1 до N баллов.

После проведения соревнования пришло время подсчета баллов команд.

Итоговый балл команды рассчитывается как среднее арифметическое по всем компетенциям.

Для автоматизации этого процесса вам требуется написать функцию на Java, принимающую размер команд и поток строк - участник и количество набранных им баллов, и возвращающую поток вещественных чисел - среднее арифметическое в каждой команде.

При решении задачи воспользуйтесь Java Stream API и следующим классом:


import java.util.*;
import java.util.stream.*;

public class Solution
{
  public static Stream<Double> average(int count, Stream<String> data)
  {
    // Ваш код
  }
}
  

Формат входных данных

На вход вашей функции подается Stream строк, каждая из которых имеет следующий формат: [Имя участника] [Количество баллов]

Участники, относящиеся к одной команде, идут последовательно во входном потоке.

За одной командой следует следующая.

Формат выходных данных

Код решения должен содержать только класс Solution с реализацией функции average. Он не должен ничего выводить.

Ограничения

1 ≤ M ≤ 103

1 ≤ P ≤ 104

1 ≤ N ≤ 106

Примеры тестов

Стандартный вход Стандартный выход
1
2
Bron 99
Li 123
Abel 101
John 224
Fred 322
Jonathan 123
111,00
162,50
222,50

Задача F. Предварительные результаты голосования

Входной файл:Стандартный вход   Ограничение времени:4 сек
Выходной файл:Стандартный выход   Ограничение памяти:512 Мб

Условие

Николай участвует в выборах президента студенческого совета.

По результатам предварительного голосования он занимает место N + 1.

Пользуясь личными связями, он получил информацию о том, сколько каждый из кандидатов набрал голосов.

Теперь он хочет выяснить, кто обошел его и занимает позицию N.

Вам необходимо реализовать функцию max(n, lines), которая по заданному числу N и информации о кандидатах, вернет имена тех, кто занимает позицию N в рейтинге, составленному по убыванию количества проголосовавших.

Стоит заметить, что несколько кандидатов могут набрать одинаковое количество голосов.

При решении задачи используйте Java Stream API и следующий класс:


import java.util.*;
import java.util.stream.*;

public class Solution
{
  public static Stream<String> max(int n, Stream<String> lines)
  {
    // Ваш код
  }
}
  

Формат входных данных

На вход вашей функции подается целое число N и Stream строк, каждая из которых имеет следующий формат: [Имя кандидата] [Количество проголосовавших]

Формат выходных данных

Код решения должен содержать только класс Solution с реализацией функции max. Он не должен ничего выводить.

Выходной поток Stream должен быть отсортирован в лексикографическом порядке по возрастанию.

Ограничения

1 ≤ N ≤ 106

Примеры тестов

Стандартный вход Стандартный выход
1
2
Bron 1
Li 8
Abel 3
John 6
Fred 8
Jonathan 9
Fred
Li

Задача G. Частотный анализ текста

Входной файл:Стандартный вход   Ограничение времени:2 сек
Выходной файл:Стандартный выход   Ограничение памяти:128 Мб

Условие

Одной из классических задач при работе с текстом является частотный анализ.

Используя Java Stream API, составьте "рейтинг" слов исходного текста по их количеству в тексте (по убыванию) и верните первые N позиций.

Слова, встречающиеся одинаковое количество раз, должны быть отсортированы лексикографически.

При решении задачи используйте следующий класс:


import java.util.*;
import java.util.stream.*;

public class Solution
{
  public static Stream<String> rate(int n, Stream<String> data)
  {
    // Ваш код
  }
}
  

Формат входных данных

На вход вашей функции подается Stream слов, которые вместе представляют анализируемый вами текст

Все слова преобразованы к нижнему регистру.

Формат выходных данных

Код решения должен содержать только класс Solution с реализацией функции rate. Он не должен ничего выводить.

Каждая строка выходного потока должна быть отформатирована в следующем виде: [слово] [количество]

Ограничения

1 ≤ N ≤ 100

Примеры тестов

Стандартный вход Стандартный выход
1
5
b a b b c cd a a a a
bab a ba lol c a b
p ab c c d e f g h i j k l m n o p q r s t u v w x y z
b a
a 8
b 5
c 4
p 2
ab 1

0.445s 0.015s 25