Форум программистов, компьютерный форум, киберфорум
AlexProgramm
Войти
Регистрация
Восстановить пароль

Задача schol.hh.ru 2023 "Офисные печеньки" из чужого блога. Реализация на Java.

Запись от AlexProgramm размещена 12.11.2023 в 14:16
Показов 1334 Комментарии 0

Реализовал на мой взгляд сложнейший алгоритм, первой задачи "Офисные печеньки" из другого этого блога господина eaa за 3 дня. Я вообще тупой?
Ну вообще реально долго думал, но в итоге надумал. Может кто оценит или раскритикует?
Или может кто свой код предложит?

Дублирую задание(надеюсь автор блога не обидится):

Задача 1. Офисные печеньки

Ограничение времени, с 1
Ограничение памяти, МБ 64

Разработчик Фёдор очень любит печеньки в офисе, и он точно знает все N мест, где их можно найти, а также точное количество печенек Сn в каждом месте. Сегодня Фёдор особенно голоден, он закончил большую задачу, и решает выделить себе M часов на то, чтобы съесть все печеньки в офисе.

Фёдор рассчитал минимальное количество печенек K, которое ему нужно съедать в течение часа так, чтобы в итоге успеть съесть все печеньки в офисе за выделенное время или раньше.

В каждый час, он может посетить одно любое место с печеньками и съесть K печенек в этом месте, он потратит на это целый час, даже если в этом месте осталось меньше, чем K печенек, потому что будет обсуждать с коллегами задачи и планы. Места без печенек Фёдор может не посещать.

Коллеги, из уважения к Фёдору, никогда не трогают его любимые печеньки


Входные данные (поступают в стандартный поток ввода)
Первая строка - целые числа N и M через пробел (1≤N≤100 000, 1≤M≤200 000)

Далее N строк, на каждой из которых одно целое число Cn (0≤Cn≤10 000)

Все входные данные наших тестов всегда соблюдают указанные параметры, дополнительные проверки не требуются.


Выходные данные (ожидаются в стандартном потоке вывода)
Одно целое число, минимально возможное K. Либо 0, если в офисе нет печенек, или если Фёдор не успеет съесть все печеньки за выделенное время.

Пример 1
Ввод:
3 6
4
4
4

Вывод:
2
Простой пример для ознакомления с входными и выходными данными

Пример 2
Ввод:
3 6
4
4
5

Вывод:
3
Здесь похожая ситуация, но съедая по 2 печеньки, Фёдор не успеет съесть последнюю

Пример 3
Ввод:
3 3
6
6
8

Вывод:
8
Граничная ситуация при N = M

Автор блога реализовал эту задачу на Питоне.

Реализация на Java:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package forum.forumjava27;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import static javax.swing.text.html.HTML.Attribute.N;
 
 
public class ForumJava27 {
 
    public static void main(String[] args) throws IOException {
        
        int n, m, sumAll = 0;
        
        System.out.println("Введите N и M через пробел: ");
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String str = reader.readLine();
        //reader.close(); 
        String[] splitStr = str.split(" ");
        if (splitStr.length > 2) {
            System.out.println("Ошибка!");
            return;
        }
        n = Integer.parseInt(splitStr[0]);
        m = Integer.parseInt(splitStr[1]);
        if (n < 1 || n > 100000 || m < 1 || m > 200000) {
            System.out.println("Ошибка!");
            return;
        }
        System.out.println("Места с печеньками: " + n + ". Время: " + m);
        System.out.println();
        System.out.println("Введите точное количество печенек в " + n + " местах : ");
        //Scanner sc = new Scanner(System.in);
        BufferedReader stcol = new BufferedReader(new InputStreamReader(System.in));
        
        //создаем целочисленный массив из количества мест, со значениями по количеству печенек
        int[] col = new int[n];
        for (int i = 0; i < col.length; i++) {
            col[i] = Integer.parseInt( stcol.readLine());
            if (col[i] < 0 || col[i] > 10000) {
                System.out.println("Ошибка!");
                return;
            }
            
        }
        stcol.close();
        reader.close();
        
        //выводим введенные данные на экран
        System.out.println(n + " " + m);
        for (int i = 0; i < n; i++) {
            System.out.println(col[i]);
            sumAll = sumAll + col[i];
        }
        
        //p- печеньки, h - часы, к - минимальное кол-во печенек, j - место для печенек
        // sumAll - общее колич печенек
        int j = 0, p, h;
        p = col[j];
        h = m;
        //начинаем с 1 печенек, если циклы не пройдут, то будем увеличивать к
        for (int k = 1; k <= sumAll; k++) {
            h = m;
            //идем по каждому месту с печеньками
            for (j = 0; j < col.length; j++) {
                p = col[j];
                //идем по количеству печенек в одном каждом месте
                for(int i = 1; i <= col[j]; i++) {
                    p = p - k; 
                    h = h - 1; 
                    //если заканчиватся печеньки или часы, то выходим из цикла
                    if (p <= 0 || h <= 0)
                        break;
                }
                //если заканчиваются часы, то значит это минимальное количество печенек не хватит, К нужно больше 
                if (h <= 0)
                    break;
                
                // если не вышли, значит возвращаемся к увеличению j , тоесть переходим к следующему месту с печеньками
            }
            
            //если выполняются условия, то мы нашли МИН К
            if (h >= 0 && j == (col.length - 1) && p <= 0) {
                System.out.println("min = " + k);
                break;
            }
                
        }
        
        System.out.println("Hello World!");
    }
}
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru