Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace PetyaExam
- {
- internal class Program
- {
- static void Main(string[] args)
- {
- int d; //количество дней
- int sumTime; //общее количество часов, затраченных на подготовку
- int[] minTime;
- int[] maxTime;
- using(var sr = new StreamReader("input.txt"))
- {
- string[] newString = sr.ReadLine().Split(' ');
- d = int.Parse(newString[0]);
- sumTime = int.Parse(newString[1]);
- minTime = new int[d];
- maxTime = new int[d];
- for (int i = 0; i < d; i++) //проходим по всем строкам и заполняем массивы minTime и maxTime (i-ый элемент каждого массива это i-ый день)
- {
- newString = sr.ReadLine().Split(' ');
- minTime[i] = int.Parse(newString[0]);
- maxTime[i] = int.Parse(newString[1]);
- }
- }
- int[] schedule = CalculateTime(minTime, maxTime, sumTime);
- if (SumArray(schedule) == sumTime)//Если мы смогли запихнуть все часы, то выводим YES и массив с расписанием
- {
- Console.WriteLine("YES");
- for (int i = 0; i < d; i++)
- {
- Console.Write(schedule[i] + " ");
- }
- }
- else Console.WriteLine("NO");
- Console.ReadKey();
- }
- public static int[] CalculateTime(int[] minTime, int[] maxTime, int sumTime)
- {
- int[] arrayOfSchedule = new int[minTime.Length]; //Массив для расписания Васи
- int tempSumTime = sumTime; //Общее количество времени
- for (int i = 0; i < minTime.Length; i++)//cначала идём по минимальному времени
- {
- arrayOfSchedule[i] = minTime[i];//записываем минимальное время, условленное родителями
- tempSumTime = tempSumTime - minTime[i];//вычитаем из всего времени минимальное, которое записали в график (для понимания сколько осталось времени распределить)
- }
- //если общее время стало отрицательным (мы не смогли даже минимально распределить наше время на время родителей) или равно нулю (мы распределили всё время)
- if (tempSumTime <= 0)
- {
- return arrayOfSchedule; //тогда выходим из метода
- }
- //иначе осталось ещё время и распределяем его
- for (int i = 0; i < minTime.Length; i++)
- {
- if(arrayOfSchedule[i] < maxTime[i])//Если рассматриваемое время меньше максимального, которое установили родители, то прибавляем к нему из tempSumTime до максимального
- {
- int difference = maxTime[i] - arrayOfSchedule[i];//разница между максимальным и текущим
- if(tempSumTime >= difference) //Если общее количество времени больше или равно тому, что надо прибавить
- {
- arrayOfSchedule[i] += difference; //просто добавляем разницу (заполняем день до максимума)
- tempSumTime -= difference;
- }
- else //Если общее количество времени меньше того, что нужно добавить
- {
- arrayOfSchedule[i] += tempSumTime; //заливаем оставшееся время в текущий день и выходим из цикла, потому что дальше нечего будет прибавлять
- break;
- }
- }
- }
- return arrayOfSchedule;
- }
- public static int SumArray(int[] array) //Суммирование элементов массива
- {
- int sum = 0; //сумма
- for (int i = 0; i < array.Length; i++)
- {
- sum = sum + array[i];
- }
- return sum;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement