Advertisement
StreetKatya

Олимпиада Вовочки

Feb 20th, 2023
685
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.44 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace Олимпиада
  9. {
  10.     internal class Program
  11.     {
  12.         static void Main(string[] args)
  13.         {
  14.             int count = 0; //максимальное количество задач, которое Вася сможет решить.
  15.             int N,skill; //N-количество задач, skill-исходное умение
  16.             int[,] items; //1-сколько умения нужно для решения i-й задачи; 2-сколько умения прибавится после решения i-й задачи
  17.             using (StreamReader sr = new StreamReader("input.txt"))
  18.             {
  19.                 string[] line = sr.ReadLine().Split(' ');//Читаем первую строку с файла
  20.                 N = int.Parse(line[0]);
  21.                 skill = int.Parse(line[1]);
  22.  
  23.                 items = new int[N,2];//Инициализируем массивы
  24.  
  25.                 string[] templine;
  26.                 for (int i = 0; i < N; i++)//Заполняем массивы всех элементов
  27.                 {
  28.                     templine = sr.ReadLine().Split(' ');
  29.                     items[i, 0] = int.Parse(templine[0]);
  30.                     items[i, 1] = int.Parse(templine[1]);
  31.                 }
  32.             }
  33.             ParallelSortArray(items, 0, N-1);//Сортируем массив параллельно по первому признаку
  34.  
  35.             for (int i = 0; i < N; i++)//Проходим по всему массиву.
  36.             {
  37.                 if (items[i, 0] <= skill)//Если нужный навык меньше или равен скилу Вовы, то прокачиваем Вову и увеличиваем счётчик задач
  38.                 {
  39.                     count++;
  40.                     skill += items[i, 1];
  41.                 }
  42.                 else break;//Иначе выходим из цикла, потому что до этого мы отсортировали массив по навыку, который нужен для выполнения iой задачи и в дальнейшем  никогда не зайдем в if()
  43.             }
  44.             Console.WriteLine(count);
  45.             Console.ReadKey();
  46.  
  47.         }
  48.         public static void ParallelSortArray(int[,] items, int leftIndex, int rightIndex)
  49.         {
  50.             var i = leftIndex;
  51.             var j = rightIndex;
  52.             var pivot = items[leftIndex, 0];
  53.             while (i <= j)
  54.             {
  55.                 while (items[i, 0] < pivot)
  56.                 {
  57.                     i++;
  58.                 }
  59.  
  60.                 while (items[j, 0] > pivot)
  61.                 {
  62.                     j--;
  63.                 }
  64.                 if (i <= j)
  65.                 {
  66.                     int temp = items[i, 0];
  67.                     items[i, 0] = items[j, 0];
  68.                     items[j, 0] = temp;
  69.  
  70.                     temp = items[i, 1];
  71.                     items[i, 1] = items[j, 1];
  72.                     items[j, 1] = temp;
  73.  
  74.                     i++;
  75.                     j--;
  76.                 }
  77.             }
  78.             if (leftIndex < j)
  79.                 ParallelSortArray(items, leftIndex, j);
  80.             if (i < rightIndex)
  81.                 ParallelSortArray(items, i, rightIndex);
  82.         }
  83.     }
  84. }
  85.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement