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: 5 KB
using System;
using System.IO;
namespace Parcellak
{
struct Mezo
{
int x, y;
public Mezo(int x, int y)
{
this.x = x;
this.y = y;
}
public int X
{
get { return x; }
set { x = value; }
}
public int Y
{
get { return y; }
set { y = value; }
}
public override string ToString()
{
return (X + ", " + Y);
}
}
struct Parcella
{
Mezo balFelso, jobbAlso;
public Parcella(int felsoX, int felsoY, int alsoX, int alsoY)
{
balFelso = new Mezo();
jobbAlso = new Mezo();
if (felsoX <= alsoX) {
balFelso.X = felsoX;
jobbAlso.X = alsoX;
}
else {
balFelso.X = alsoX;
jobbAlso.X = felsoX;
}
if (felsoY <= alsoY) {
balFelso.Y = felsoY;
jobbAlso.Y = alsoY;
}
else {
balFelso.Y = alsoY;
jobbAlso.Y = felsoY;
}
}
public Parcella(Mezo sarok1, Mezo sarok2)
: this(sarok1.X, sarok1.Y, sarok2.X, sarok2.Y)
{
}
public int BalSzel
{
get { return balFelso.X; }
}
public int JobbSzel
{
get { return jobbAlso.X; }
}
public int FelsoSzel
{
get { return balFelso.Y; }
}
public int AlsoSzel
{
get { return jobbAlso.Y; }
}
public int Szelesseg
{
get { return (JobbSzel - BalSzel + 1); }
}
public int Hosszusag
{
get { return (AlsoSzel - FelsoSzel + 1); }
}
public int Terulet
{
get { return (Szelesseg * Hosszusag); }
}
public bool Tartalmaz(Mezo mezo)
{
return (
mezo.X >= BalSzel && mezo.X <= JobbSzel &&
mezo.Y >= FelsoSzel && mezo.Y <= AlsoSzel
);
}
public override string ToString()
{
return string.Format("[{0}], [{1}]", balFelso, jobbAlso);
}
}
class ParcellaHalmaz
{
int meret;
Parcella[] parcellak;
public ParcellaHalmaz(int kapacitas)
{
if (kapacitas < 0) {
throw new ArgumentOutOfRangeException(
"kapacitas", "A kapacitás nem lehet negatív.");
}
meret = 0;
parcellak = new Parcella[kapacitas];
}
public int Meret
{
get { return meret; }
}
public Parcella this[int index]
{
get
{
if (index < 0 || index >= meret)
throw new ArgumentOutOfRangeException("index", "Érvénytelen index.");
return parcellak[index];
}
}
public void Hozzaad(Parcella parcella)
{
if (meret >= parcellak.Length)
throw new InvalidOperationException("Nincs több hely az új elemnek.");
parcellak[meret++] = parcella;
}
public void Torol(int index)
{
if (index < 0 || index >= meret)
throw new ArgumentOutOfRangeException("index", "Érvénytelen index.");
parcellak[index] = parcellak[--meret];
}
}
class Foldmuves
{
Parcella termoFold;
ParcellaHalmaz parcellak;
public Foldmuves(int hosszusag, int szelesseg, int felosztasokSzama)
{
if (hosszusag <= 0 || hosszusag > 10000)
throw new ArgumentOutOfRangeException("hosszusag");
if (szelesseg <= 0 || szelesseg > 10000)
throw new ArgumentOutOfRangeException("szelesseg");
termoFold = new Parcella(1, 1, szelesseg, hosszusag);
parcellak = new ParcellaHalmaz(felosztasokSzama * 3 + 1);
parcellak.Hozzaad(termoFold);
}
public void Feloszt(Mezo metszespont)
{
if (metszespont.X <= 0 || metszespont.Y <= 0 ||
metszespont.X > termoFold.Szelesseg || metszespont.Y > termoFold.Hosszusag)
{
throw new ArgumentException("Érvénytelen mező.", "mezo");
}
for (int i = 0; i < parcellak.Meret; i++) {
if (parcellak[i].Tartalmaz(metszespont)) {
Darabol(i, metszespont);
return;
}
}
}
private void Darabol(int parcellaIndex, Mezo metszespont)
{
if (parcellaIndex < 0 || parcellaIndex >= parcellak.Meret)
return;
Parcella regi = parcellak[parcellaIndex];
parcellak.Torol(parcellaIndex);
if (metszespont.X > regi.BalSzel && metszespont.Y > regi.FelsoSzel) {
parcellak.Hozzaad(new Parcella(regi.BalSzel, regi.FelsoSzel,
metszespont.X - 1, metszespont.Y - 1));
}
if (metszespont.X > regi.BalSzel && metszespont.Y < regi.AlsoSzel) {
parcellak.Hozzaad(new Parcella(regi.BalSzel, metszespont.Y + 1,
metszespont.X - 1, regi.AlsoSzel));
}
if (metszespont.X < regi.JobbSzel && metszespont.Y > regi.FelsoSzel) {
parcellak.Hozzaad(new Parcella(metszespont.X + 1, regi.FelsoSzel,
regi.JobbSzel, metszespont.Y - 1));
}
if (metszespont.X < regi.JobbSzel && metszespont.Y < regi.AlsoSzel) {
parcellak.Hozzaad(new Parcella(metszespont.X + 1, metszespont.Y + 1,
regi.JobbSzel, regi.AlsoSzel));
}
}
public int LegnagyobbParcellaTerulete()
{
int max = 0;
for (int i = 0; i < parcellak.Meret; i++) {
if (parcellak[i].Terulet > max)
max = parcellak[i].Terulet;
}
return max;
}
}
public static class Program
{
const string InputFile = "parcellak0.be";
private static Foldmuves Beolvas(string fileNev)
{
using (StreamReader reader = new StreamReader(fileNev))
{
string[] elsoSor = reader.ReadLine().Split();
int n = int.Parse(elsoSor[0]);
int m = int.Parse(elsoSor[1]);
int k = int.Parse(elsoSor[2]);
Foldmuves gazda = new Foldmuves(n, m, k);
for (int i = 0; i < k; i++) {
string[] sor = reader.ReadLine().Split();
int x = int.Parse(sor[0]);
int y = int.Parse(sor[1]);
gazda.Feloszt(new Mezo(x, y));
}
return gazda;
}
}
public static void Main(string[] args)
{
Foldmuves gazda = Beolvas(InputFile);
Console.WriteLine(gazda.LegnagyobbParcellaTerulete());
Console.ReadLine();
}
}
}