7236 2024. 01. 04 13:18:20 czita Negáló rendezés (55 pont) csharp Elfogadva 55/55 97ms 44552 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
            long[] m=new long[100001];//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
            {
                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
            for (int i=0;i<m.Length; i++)//bejárjuk a dictionary-t
            {
                if (i != mini &m[i]!=0)//a minimális elemeket kizárjuk
                {
                    db = db * (m[i] + 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();
        }
    }
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 55/55
1 Elfogadva 0/0 34ms 23016 KiB
2 Elfogadva 0/0 90ms 40440 KiB
3 Elfogadva 2/2 32ms 24212 KiB
4 Elfogadva 2/2 30ms 24240 KiB
5 Elfogadva 2/2 30ms 24580 KiB
6 Elfogadva 2/2 30ms 24860 KiB
7 Elfogadva 3/3 34ms 25128 KiB
8 Elfogadva 2/2 32ms 25204 KiB
9 Elfogadva 3/3 37ms 26676 KiB
10 Elfogadva 3/3 90ms 40304 KiB
11 Elfogadva 3/3 90ms 42384 KiB
12 Elfogadva 3/3 89ms 42484 KiB
13 Elfogadva 3/3 92ms 42148 KiB
14 Elfogadva 3/3 90ms 42624 KiB
15 Elfogadva 3/3 90ms 42712 KiB
16 Elfogadva 3/3 93ms 43024 KiB
17 Elfogadva 3/3 92ms 42280 KiB
18 Elfogadva 3/3 97ms 44256 KiB
19 Elfogadva 3/3 94ms 43988 KiB
20 Elfogadva 3/3 92ms 44160 KiB
21 Elfogadva 3/3 86ms 43108 KiB
22 Elfogadva 3/3 92ms 44552 KiB