Informatika gyűjtemény

NézetNyomtat

kb_rendez.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: 1 KB
using System;
using System.Collections.Generic;
using System.IO;

namespace Rendez
{
    class Order : IComparable<Order>
    {
        private int id;
        private int k, b;
        
        public int StartTime {
            get {
                return k;
            }
        }

        public int EndTime {
            get {
                return b;
            }
        }

        public int Id {
            get {
                return id;
            }
        }
        
        public Order( int _k, int _b, int _id )
        {
            id = _id;
            k = _k;
            b = _b;
        }
        
        #region IComparable<Order> Members
        public int CompareTo(Order other)
        {
            // minél hamarabb befejeződik annál jobb!
            return EndTime.CompareTo(other.EndTime);
        }
        #endregion
    }
    
    class Program
    {
        private int n;
        private List<Order> orders;
        
        public Program()
        {
            StreamReader ins = new StreamReader("rendez.be");
            string[] line = ins.ReadLine().Split(' ');
            n = int.Parse( line[0] );

            orders = new List<Order>(n);
            int id = 0;
            for( int i=0; i<n; i++ ) {
                line = ins.ReadLine().Split(' ');
                orders.Add( new Order( int.Parse( line[0] ), int.Parse( line[1] ), ++id ) );
            }
            
            ins.Close();

            orders.Sort(); // rendezünk!
            
            int room1End = -1, room2End = -1;
            List<int> room1 = new List<int>(n), room2 = new List<int>(n);
            
            foreach(Order o in orders) {
                if( o.StartTime > room1End && (o.StartTime <= room2End || room1End >= room2End) ) {
                    // ekkor tesszük az első szobába.
                    room1.Add(o.Id);
                    room1End = o.EndTime;
                } else if( o.StartTime > room2End && (o.StartTime <= room1End || room2End >= room1End) ) {
                    room2.Add(o.Id);
                    room2End = o.EndTime;
                }
            }
            
            StreamWriter outs = new StreamWriter("rendez.ki");
            outs.WriteLine("{0} {1}", room1.Count, room2.Count);
            foreach(int ID in room1)
                outs.Write("{0} ", ID);
            outs.WriteLine();
            foreach(int ID in room2)
                outs.Write("{0} ", ID);
            outs.WriteLine();
            outs.Close();
        }
        
        public static void Main(string[] args)
        {
            new Program();
        }
    }
}
(Vissza)