Advertisement
StreetKatya

PetyaExam

Mar 5th, 2023
691
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.96 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace PetyaExam
  9. {
  10.     internal class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.             int d; //количество дней
  15.             int sumTime; //общее количество часов, затраченных на подготовку
  16.             int[] minTime;
  17.             int[] maxTime;
  18.             using(var sr = new StreamReader("input.txt"))
  19.             {
  20.                 string[] newString = sr.ReadLine().Split(' ');
  21.                 d = int.Parse(newString[0]);
  22.                 sumTime = int.Parse(newString[1]);
  23.                 minTime = new int[d];
  24.                 maxTime = new int[d];
  25.                 for (int i = 0; i < d; i++) //проходим по всем строкам и заполняем массивы minTime и maxTime (i-ый элемент каждого массива это i-ый день)
  26.                 {
  27.                     newString = sr.ReadLine().Split(' ');
  28.                     minTime[i] = int.Parse(newString[0]);
  29.                     maxTime[i] = int.Parse(newString[1]);
  30.                 }
  31.             }
  32.             int[] schedule = CalculateTime(minTime, maxTime, sumTime);
  33.             if (SumArray(schedule) == sumTime)//Если мы смогли запихнуть все часы, то выводим YES и массив с расписанием
  34.             {
  35.                 Console.WriteLine("YES");
  36.                 for (int i = 0; i < d; i++)
  37.                 {
  38.                     Console.Write(schedule[i] + " ");
  39.                 }
  40.             }
  41.             else Console.WriteLine("NO");
  42.             Console.ReadKey();
  43.         }
  44.         public static int[] CalculateTime(int[] minTime, int[] maxTime, int sumTime)
  45.         {
  46.             int[] arrayOfSchedule = new int[minTime.Length]; //Массив для расписания Васи
  47.             int tempSumTime = sumTime; //Общее количество времени
  48.  
  49.             for (int i = 0; i < minTime.Length; i++)//cначала идём по минимальному времени
  50.             {
  51.                 arrayOfSchedule[i] = minTime[i];//записываем минимальное время, условленное родителями
  52.                 tempSumTime = tempSumTime - minTime[i];//вычитаем из всего времени минимальное, которое записали в график (для понимания сколько осталось времени распределить)
  53.             }
  54.  
  55.             //если общее время стало отрицательным (мы не смогли даже минимально распределить наше время на время родителей) или равно нулю (мы распределили всё время)
  56.             if (tempSumTime <= 0)
  57.             {
  58.                 return arrayOfSchedule; //тогда выходим из метода
  59.             }
  60.  
  61.             //иначе осталось ещё время и распределяем его
  62.             for (int i = 0; i < minTime.Length; i++)
  63.             {
  64.                 if(arrayOfSchedule[i] < maxTime[i])//Если рассматриваемое время меньше максимального, которое установили родители, то прибавляем к нему из tempSumTime до максимального
  65.                 {
  66.                     int difference = maxTime[i] - arrayOfSchedule[i];//разница между максимальным и текущим
  67.                     if(tempSumTime >= difference) //Если общее количество времени больше или равно тому, что надо прибавить
  68.                     {
  69.                         arrayOfSchedule[i] += difference; //просто добавляем разницу (заполняем день до максимума)
  70.                         tempSumTime -= difference;
  71.                     }
  72.                     else //Если общее количество времени меньше того, что нужно добавить
  73.                     {
  74.                         arrayOfSchedule[i] += tempSumTime; //заливаем оставшееся время в текущий день и выходим из цикла, потому что дальше нечего будет прибавлять
  75.                         break;
  76.                     }
  77.                 }
  78.             }
  79.             return arrayOfSchedule;
  80.         }
  81.         public static int SumArray(int[] array) //Суммирование элементов массива
  82.         {
  83.             int sum = 0; //сумма
  84.             for (int i = 0; i < array.Length; i++)
  85.             {
  86.                 sum = sum + array[i];
  87.             }
  88.             return sum;
  89.         }
  90.     }
  91. }
  92.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement