155412025-02-20 11:44:03DominikMaximális szorzat (50 pont)csharpFutási hiba 0/5014ms3208 KiB
using System;
using System.Collections.Generic;
using System.Linq;

namespace NT_gyak
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] data = Console.ReadLine().Split(' ');
            int N = int.Parse(data[0]);
            int K = int.Parse(data[1]);
            int b = int.Parse(data[2]);
            int negatives = 0;
            string[] data2 = Console.ReadLine().Split(' ');
            List<int> numbers = new List<int>();
            for (int i = 0; i < N; i++)
            {
                numbers.Add(int.Parse(data2[i]));
                if (numbers[numbers.Count - 1] < 0)
                {
                    negatives++;
                }
            }
            numbers.Sort();
            for (int i = b; i < negatives; i++)
            {
                K += numbers[i];
                numbers[i] = 0;
            }
            if (b>negatives)
            {
                K = -1;
            }
            else if(b == numbers.Count)
            {
                numbers.Sort();
                for (int i = numbers.Count-1; i >-1; i--)
                {
                    int saved = numbers[i];
                    numbers[i] += Math.Min(-numbers[i]-1, K);
                    K += saved+1;
                }
                if (K<=0)
                {
                    K = 0;
                }
                else
                {
                    K = -1;
                }
            }
            while (K > 0)
            {
                numbers[b]++;
                int x = b+1;
                int from = numbers[b];
                while (x < numbers.Count&&from>numbers[x])
                {
                    numbers[x-1] = numbers[x];
                    x++;
                }
                numbers[x-1] = from;
                K--;
            }
            for (int i = 0; i < numbers.Count; i++)
            {
                numbers[i] = Math.Abs(numbers[i]);
            }
            if (K==0)
            {
                ulong szorzat = 1;
                for (int i = 0; i < N; i++)
                {
                    szorzat *= (ulong)numbers[i];
                    szorzat %= 1000000007;
                }
                Console.WriteLine(szorzat);
            }
            else if(K<0)
            {
                Console.WriteLine("-1");
            }
            Console.ReadKey();
        }
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base0/50
1Futási hiba0/014ms2968 KiB
2Futási hiba0/014ms2524 KiB
3Futási hiba0/014ms2808 KiB
4Futási hiba0/014ms2860 KiB
5Futási hiba0/013ms2524 KiB
6Futási hiba0/214ms2668 KiB
7Futási hiba0/214ms2768 KiB
8Futási hiba0/214ms2800 KiB
9Futási hiba0/214ms3208 KiB
10Futási hiba0/214ms2832 KiB
11Futási hiba0/214ms2720 KiB
12Futási hiba0/114ms2524 KiB
13Futási hiba0/114ms2888 KiB
14Futási hiba0/114ms2512 KiB
15Futási hiba0/114ms2680 KiB
16Futási hiba0/114ms2840 KiB
17Futási hiba0/114ms2708 KiB
18Futási hiba0/114ms2932 KiB
19Futási hiba0/114ms2832 KiB
20Futási hiba0/114ms2748 KiB
21Futási hiba0/114ms2748 KiB
22Futási hiba0/114ms2824 KiB
23Futási hiba0/114ms2808 KiB
24Futási hiba0/114ms2880 KiB
25Futási hiba0/214ms2836 KiB
26Futási hiba0/214ms2540 KiB
27Futási hiba0/214ms2552 KiB
28Futási hiba0/114ms2792 KiB
29Futási hiba0/214ms3060 KiB
30Futási hiba0/114ms2856 KiB
31Futási hiba0/114ms2888 KiB
32Futási hiba0/214ms2852 KiB
33Futási hiba0/214ms2820 KiB
34Futási hiba0/114ms3020 KiB
35Futási hiba0/214ms2824 KiB
36Futási hiba0/214ms3060 KiB
37Futási hiba0/214ms2784 KiB
38Futási hiba0/214ms2820 KiB
39Futási hiba0/114ms2780 KiB