Informatika gyűjtemény

Egy szinttel feljebb kb_mozgat.cs

2004050607080910

NézetNyomtat

kb_mozgat.cs (Vissza)
Az alábbi letöltési lehetőségek közül választhatsz: (segítség)
Karakterkódolás:
Sortörés:
Típus: text/plain
Tartalmaz szöveget
Karakterkódolás: utf-8
Méret: 3 KB
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace Mozgat
{
    class MyLinkedList
    {
        private int[] data; // tartalmazza, hogy melyik sorban melyik sor van
        private int[] daddies; // apukákat -> -1 => invalid
        private int[] children; // gyerekek -> -1 => invalid
        private int bigDaddy;

        public MyLinkedList( int n )
        {
            data = new int[n];
            daddies = new int[n];
            children = new int[n];
            for (int i = 0; i < n; i++)
            {
                daddies[i] = i - 1;
                children[i] = i != n-1 ? i + 1 : -1;
                data[i] = i;
            }
        }

        public void move(int A, int B, int C)
        {
            if(== C || A-1 == C) return; // semmi se történik.

            int from = data[A-1];
            int to = data[B-1];
            int dest = C > 0 ? data[C-1] : -1;

            // kivágunk.
            if (daddies[from] != -1) children[daddies[from]] = children[to];
            if (children[to] != -1)
            {
                daddies[children[to]] = daddies[from];
                if (daddies[children[to]] == -1)
                {
                    bigDaddy = children[to]; // ő a legelső!!!
                }
            }
            // beszúrunk
            int children_dest = dest != -1 ? children[dest] : bigDaddy;

            daddies[from] = dest;
            if (dest == -1)
            {
                bigDaddy = from;
            }
            if( dest != -1 ) children[dest] = from;

            children[to] = children_dest;
            if( children[to] != -1 ) daddies[children[to]] = to;

            // egy ilyen mozgatás után állítsuk fel a sorok rendjét a _data_-ban.
            int i = bigDaddy;
            int j = 0;
            while (!= -1)
            {
                data[j++] = i;
                i = children[i];
            }
        }

        public void trace()
        {
            for (int i = 0; i < data.Length; i++)
            {
                Console.WriteLine( data[i]+1 );
            }
        }

        public string getOriginalFirst10()
        {
            StringBuilder sb = new StringBuilder();

            int[] pos = new int[10];

            for (int i = 0; i < data.Length; i++)
            {
                if (data[i] < 10) pos[data[i]] = i;
            }

            for (int i = 0; i < 10; i++)
            {
                if (!= 0) sb.Append(" ");
                sb.Append(pos[i] + 1);
            }
            
            return sb.ToString();
        }

        public string getCurrentFirst10()
        {
            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < 10; i++)
            {
                if (!= 0) sb.Append(" "); 
                sb.Append( data[i]+1 );
            }

            return sb.ToString();
        }
    }

    class Program
    {
        private MyLinkedList lines;
        private int n, k;
        public const char TaskNo = '5';

        public Program()
        {
            StreamReader ins = new StreamReader("mozgat.be" + TaskNo);
            StreamWriter outs = new StreamWriter("mozgat.ki" + TaskNo);
            string[] line = ins.ReadLine().Split(' ');
            n = int.Parse(line[0]);
            k = int.Parse(line[1]);
            lines = new MyLinkedList( n );
            for (int i = 0; i < k; i++)
            {
                line = ins.ReadLine().Split(' ');
                lines.move(int.Parse(line[0]), int.Parse(line[1]), int.Parse(line[2]));
            }
            
            outs.WriteLine( lines.getOriginalFirst10() );
            outs.WriteLine( lines.getCurrentFirst10() );
            outs.Close();
        }

        static void Main(string[] args)
        {
            new Program();
        }
    }
}
(Vissza)