72362024-01-04 13:18:20czitaNegáló rendezés (55 pont)csharpAccepted 55/5597ms44552 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();
        }
    }
}
SubtaskSumTestVerdictTimeMemory
base55/55
1Accepted0/034ms23016 KiB
2Accepted0/090ms40440 KiB
3Accepted2/232ms24212 KiB
4Accepted2/230ms24240 KiB
5Accepted2/230ms24580 KiB
6Accepted2/230ms24860 KiB
7Accepted3/334ms25128 KiB
8Accepted2/232ms25204 KiB
9Accepted3/337ms26676 KiB
10Accepted3/390ms40304 KiB
11Accepted3/390ms42384 KiB
12Accepted3/389ms42484 KiB
13Accepted3/392ms42148 KiB
14Accepted3/390ms42624 KiB
15Accepted3/390ms42712 KiB
16Accepted3/393ms43024 KiB
17Accepted3/392ms42280 KiB
18Accepted3/397ms44256 KiB
19Accepted3/394ms43988 KiB
20Accepted3/392ms44160 KiB
21Accepted3/386ms43108 KiB
22Accepted3/392ms44552 KiB