72352024-01-04 13:14:44czitaNegáló rendezés (55 pont)csharpFutási hiba 20/5596ms44136 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[n+1];//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ÖsszpontTesztVerdiktIdőMemória
base20/55
1Elfogadva0/032ms22216 KiB
2Futási hiba0/087ms40288 KiB
3Elfogadva2/229ms23004 KiB
4Futási hiba0/232ms22964 KiB
5Futási hiba0/232ms23336 KiB
6Futási hiba0/232ms23488 KiB
7Futási hiba0/332ms23584 KiB
8Futási hiba0/232ms23840 KiB
9Futási hiba0/337ms24724 KiB
10Futási hiba0/382ms41124 KiB
11Elfogadva3/390ms42452 KiB
12Elfogadva3/387ms42836 KiB
13Futási hiba0/387ms42464 KiB
14Elfogadva3/393ms43244 KiB
15Futási hiba0/390ms43476 KiB
16Elfogadva3/390ms43212 KiB
17Futási hiba0/389ms42068 KiB
18Elfogadva3/396ms43880 KiB
19Elfogadva3/394ms43112 KiB
20Futási hiba0/386ms42832 KiB
21Futási hiba0/382ms41824 KiB
22Futási hiba0/390ms44136 KiB