Az alábbi letöltési lehetőségek közül választhatsz: (
segítség)
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;
private int[] daddies;
private int[] children;
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(B == C || A-1 == C) return;
int from = data[A-1];
int to = data[B-1];
int dest = C > 0 ? data[C-1] : -1;
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];
}
}
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;
int i = bigDaddy;
int j = 0;
while (i != -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 (i != 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 (i != 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();
}
}
}