37282023-03-02 14:32:25PeterSzínezéscsharpIdőlimit túllépés 20/50680ms24924 KiB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace szinezes
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int[] st = Console.ReadLine().Split().Select(int.Parse).ToArray();
            int golyokszama = st[0];
            int valtozasokszama = st[1];
            string strlanc = Console.ReadLine();
            int[] allapot = new int[golyokszama + 1];
            int[] X = new int[valtozasokszama];
            for (int i = 0; i < valtozasokszama; i++)
            {
                X[i] = int.Parse(Console.ReadLine());
            }
            for (int i = 0; i < golyokszama; i++)
            {
                if (strlanc[i] == '0')
                {
                    allapot[i] = 0; //String elemére lehet indexelni
                }
                else
                {
                    allapot[i] = 1;
                }

            }

            allapot[golyokszama] = 2; //Ezért kellett a +1, hogy lezárhassuk valamivel, könnyebb feldolgozni
            int db0=0, db1=0, valtozas;

            db0 = 0; //Hány db nullás blokk van
            db1 = 0; //Hány db egyes blokk van
            for (int i = 0; i < golyokszama; i++)
            {
                if (allapot[i] != allapot[i + 1]) //Ha a következő érték más mint az előző akkor új blokk kezdődik
                {
                    if (allapot[i] == 0)
                    {
                        db0++;
                    }
                    else
                    {
                        db1++;
                    }
                }
            }
            if (db0 < db1)
            {
                Console.WriteLine(db0);
            }
            else
            {
                Console.WriteLine(db1);
            }


            for (int j = 0; j < valtozasokszama; j++)
            {
                db0 = 0; //Hány db nullás blokk van
                db1 = 0; //Hány db egyes blokk van
                valtozas = X[j];
                allapot[valtozas - 1] = 1 - allapot[valtozas-1]; //Flippelés
                for(int i = 0; i < golyokszama; i++)
                {
                    if (allapot[i] != allapot[i + 1]) //Ha a következő érték más mint az előző akkor új blokk kezdődik
                    {
                        if (allapot[i] == 0)
                        {
                            db0++;
                        }
                        else
                        {
                            db1++;
                        }
                    }
                }
                //Megoldás a kettő közül a kisebb, mivel azokat kevesebb lépés átváltoztatni
                if (db0<db1)
                {
                    Console.WriteLine(db0);
                }
                else
                {
                    Console.WriteLine(db1);
                }
            }

            //Console.ReadKey();

        }
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base20/50
1Elfogadva0/032ms21744 KiB
2Elfogadva0/0166ms22504 KiB
3Elfogadva2/230ms22708 KiB
4Elfogadva2/229ms23020 KiB
5Elfogadva3/330ms23276 KiB
6Elfogadva3/330ms23996 KiB
7Elfogadva3/341ms24040 KiB
8Elfogadva3/341ms24708 KiB
9Elfogadva2/241ms24424 KiB
10Elfogadva2/241ms24924 KiB
11Időlimit túllépés0/3633ms14676 KiB
12Időlimit túllépés0/3651ms14804 KiB
13Időlimit túllépés0/3660ms15212 KiB
14Időlimit túllépés0/3654ms15292 KiB
15Időlimit túllépés0/3663ms15084 KiB
16Időlimit túllépés0/3675ms15484 KiB
17Időlimit túllépés0/3652ms15404 KiB
18Időlimit túllépés0/3656ms15468 KiB
19Időlimit túllépés0/3648ms15536 KiB
20Időlimit túllépés0/3680ms15392 KiB