72372024-01-04 13:32:45czitaNegáló rendezés (55 pont)csharpAccepted 55/55112ms55624 KiB
using System;
using System.Collections.Generic;
using System.Linq;



namespace negalorendezes
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());//darabszám beolvasása
            Dictionary<long, long> m = new Dictionary<long, long>();//megszámoljuk a számejegyek darabszámát
            long mini = 100001;//a legkisebb elem
            //az lapelképzelés az, hogy pl. 3 számot 4 (123,321,312,213) féleképpen tudunk kombinálni,
            //de ha negatív előjelú is lehetnek 16 db (123 -123 -1-23,-1-2-3 | 213,-213,-2-13,-2-1-3 | 312 -312 -3-21 -3-2-1|| 321 -321 -3-21 -3-2-1),
            //de ekkor ugyanaz a sorozat újra előfordulhat mivel visszalakítjuk pozitívvá
            //így ismétlődések keletkezhetnek, ezt akkor keletketik, ha pl 1 2 3 számok esetén a -1 2 3=> 1 2 3 , -2 1 3=>2 1 3 =-2 -1 3
            //ha a legkisebbet kihagyjuk akkor kobinációbúl akkor különbözö variációkat fogunk kapni 
            long[] a = Console.ReadLine().Split().Select(long.Parse).ToArray();//sor beolvasása
            for (int i = 0; i < n; i++)//végi megyünk az elemeken
            {
                if (!m.ContainsKey(a[i]))//ha nincs benne beletesszĂĽk a dictionarybe
                {
                    m.Add(a[i], 0);
                }
                m[a[i]]++;//növeljük az étékét, megszámoljuk, hogy ez egyes számk, hognyszr szerpelnek
                mini = Math.Min(mini, a[i]);//megatározzuk azt a számot, amely legissebb az értéke, ez kerül a pozitív elemek elejére
            }
            long db = 1;//az esetek darabszáma
            // az 3 | 1 2 3 adathalmaznál a dict: 1 1,2 1, 3 1, mini=1
            foreach (var item in m)//bejárjuk a dictionary-t
            {
                if (item.Key != mini)//a minimális elemeket kizárjuk
                {
                    db = db * (item.Value + 1) % 1000000007;//hogy a szám ne legyen túl nagy vesszük az osztási maradákát egy nagy számmal
                    //a darabszám+1 szer vehetjük a különböző értékeket, mert hagyhatjuk pozitnak mindegyiket,
                    //és állíthatunk 1,2..item.value darabot negatívra
                }
            }
            //4= 2*2 ( -2 2=>213(-213) 123( 1 2 3), -3 3=>312(-3 1 2),321(-3 -2 1)  a minimális elemet az 1-et kihagyjuk
            Console.WriteLine(db);
            Console.ReadKey();
        }
    }
}
SubtaskSumTestVerdictTimeMemory
base55/55
1Accepted0/037ms22288 KiB
2Accepted0/0109ms45048 KiB
3Accepted2/235ms23224 KiB
4Accepted2/235ms23672 KiB
5Accepted2/235ms23736 KiB
6Accepted2/235ms24068 KiB
7Accepted3/335ms23920 KiB
8Accepted2/235ms24504 KiB
9Accepted3/341ms25968 KiB
10Accepted3/3108ms53744 KiB
11Accepted3/3112ms55624 KiB
12Accepted3/3101ms41684 KiB
13Accepted3/3104ms41608 KiB
14Accepted3/3108ms45804 KiB
15Accepted3/3103ms42884 KiB
16Accepted3/3107ms49252 KiB
17Accepted3/3104ms48480 KiB
18Accepted3/3108ms45272 KiB
19Accepted3/3108ms46428 KiB
20Accepted3/3104ms46656 KiB
21Accepted3/396ms43604 KiB
22Accepted3/3101ms42952 KiB