International Olympiad in Informatics 2013

Benzer belgeler
International Olympiad in Informatics Bu masal uzun yıllar önce dünya yeni kurulmuş, IOI ise henüz hayal bile değilken yaşanmıştır.

International Olympiad in Informatics 2013

Mekanik Oyuncak Bebek

Parrots (Papağanlar)

ATATÜRK ÜNİVERSİTESİ BİLGISAYAR MÜHENDİSLİĞİ BÖLÜMÜ BM 104- NESNEYE YÖNELİK PROGRAMLAMA DERSİ BAHAR DÖNEMİ ÖDEV-3

Diziler (Arrays) Çok Boyutlu Diziler

FP52 PROXIMITY KART OKUYUCUSU KULLANIM KILAVUZU

BİLG Dr. Mustafa T. Babagil 1

Dr. Fatih AY Tel: fatihay@fatihay.net

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8

Göstericiler (Pointers)

WINGO Hızlı Kullanma Kılavuzu

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

EGE ÜNİVERSİTESİ EGE MYO MEKATRONİK PROGRAMI

D İ Z İ L E R A R R A Y S

YMT219 VERİ YAPILARI ÖDEV-1

BİL1001 Bilgisayar Bilimlerine Giriş 1

NİCE TURKİYE. ROBUS Hızlı Kullanma Kılavuzu ELEKTRİKSEL BAĞLANTI

C++ Dersi: Nesne Tabanlı Programlama

Hafta 13 Fonksiyonlar

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-8 Dosya İşlemleri-1. Yrd. Doç. Dr. Ümit ATİLA

Deney 7: Fonksiyon Tanımlama ve Parametre Aktarım Yöntemleri

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

Özyineleme (Recursion)

BMT 101 Algoritma ve Programlama I 11. Hafta. Yük. Müh. Köksal Gündoğdu 1

Telefon Rehberi Uygulaması

Bigisayar Programlama

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

Dr. Fatih AY Tel: fatihay@fatihay.net

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

Sınav tarihi : Süre : 60 dak.

mod ile açılacak olan dosyanın ne amaçla açılacağı belirlenir. Bunlar:

C PROGRAMLAMA D İ L İ

Doğu Akdeniz Üniversitesi Bilgisayar Mühendisliği Bölümü. BLGM 318 Ara Sınavı Đlkbahar Dönemi 13 Nisan Ad, Soyad Öğrenci No.

Giriş. ENF102 Jeoloji

Temel Giriş/Çıkış Fonksiyonları

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Sistem Programlama. Kesmeler(Interrupts): Kesme mikro işlemcinin üzerinde çalıştığı koda ara vererek başka bir kodu çalıştırması işlemidir.

1 PROGRAMLAMAYA GİRİŞ

ALGORİTMA VE PROGRAMLAMA II

ÇOK BOYUTLU DİZİLER VE DİNAMİK BELLEK YÖNETİMİ İLE İLGİLİ ÖRNEKLER

Ders 8: Metotlar. barisgokce.com

Nice MC424. Kontrol Ünitesi

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

C++ Dersi: Nesne Tabanlı Programlama 2. Baskı

BIL222 Veri Yapıları ve Algoritmalar

S.N SINAVIN ADI SINAVIN TARİHİEĞİTİM BİTİŞ TARİHİ Temel Eğitim ve 38. Yenileme 31 Ocak Eğitimi 2016 sınavı 18 Aralık 2016

ALGORİTMA VE PROGRAMLAMA I

Final Sınavı Soruları Güz, Süre: 90 Dakika

1.1 KULLANICI YÖNETİMİ

ALGORİTMA VE PROGRAMLAMA II

Avrasya Üniversitesi. Tuncay AYDEMİR

ALGORİTMA VE PROGRAMLAMA I

5.13. SONDAJ MAKİNESİ PROJESİ

Burak Kıymaz JAVA FX

Yrd. Doç. Dr. Caner ÖZCAN

Metin Dosyaları. Metin Dosyaları Dosya Açma ve Kapama Dosya Okuma ve Yazma Rastgele Erişim Standart Girdi/Çıktı Hata Kontrolü

Dizi ( Array ) ve Dizgi ( String )

Sorgudan elde edilen değerin değişkenlere aktarılmasını sağlar. Sorgudan tek satır dönmesi gerekir, aksi durumda hata olur.

Yrd. Doç. Dr. Caner ÖZCAN

Kullanıcı tanımlı fonksiyonlar SQL2000 ile gelen özelliklerden biridir. Fonksiyonlar tek bir değer veya tablo döndürmek için kullanılır.

ROLAN ALICI KARTI KULLANIM KİTABI V 4.0

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

BLGM 343 DENEY 8 * TCP İLE VERİ İLETİŞİMİ

Aynı tipten çok sayıda değişken topluluğudur. X Y Score1 Score2 (0) (1) (2)...

ALGORİTMA VE PROGRAMLAMA II

BİL-142 Bilgisayar Programlama II

NESNEYE YÖNELİK PROGRAMLAMA

Alıştırma 1: Yineleme

WEB TASARIM I. Öğr. Gör. M. Mutlu YAPICI. Ankara Üniversitesi Elmadağ Meslek Yüksekokulu

TEKNOLOJİK ARAŞTIRMALAR

MATLAB a GİRİŞ. Doç. Dr. Mehmet İTİK. Karadeniz Teknik Üniversitesi Makine Mühendisliği Bölümü

DİZİLER 5/4/2010. ENF-102 Jeoloji Giriş. Tek Boyutlu Diziler. Tek Boyutlu Diziler. Örnek. Örnek

NESNEYE YÖNELİK PROGRAMLAMA

Yeni bir proje açarken File New - Web Site diyoruz. Gelen ekranda Visual Basic veya C# seçilebilir. Biz ders kapsamında C# programlama dilini seçtik.

ALGORİTMA VE PROGRAMLAMA I

Değişkenler tanımlanırken onlara ne tür veriler atanabileceği de belirtilir. Temel veri türleri oldukça azdır:

1 RUBY HAKINDA 1 Ruby nin Gelişim Hikayesi 1 Neden Ruby? 1 Neden Bu Kadar Popüler? 2

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

HESAP MAKİNASI YAPIMI

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I

DOSYA İŞLEMLERİ Programlama dilleri hafta -

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

PASCAL PROGRAMLAMA DİLİ YAPISI

HSancak Nesne Tabanlı Programlama I Ders Notları

Eastern Mediterranean University Faculty of Arts & Sciences -- Department Of Mathematics BİLG213 BİLGİSAYAR PROGRAMLAMAYA GİRİŞ

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

Yrd. Doç. Dr. Caner ÖZCAN

7- Turbo Pascal Programlamada Alt Programlar (Procedure)

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

ALGORİTMA VE PROGRAMLAMA II

BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

Strike 4.40 RP Kart ve Şifre Okuyucu Kullanım Kılavuzu

KUMANDA DEVRELERİ Örnek 1: Stop öncelikli Start Stop Devresi (Klasik Mühürleme Devresi):

2 Kablolu Görüntülü Diafon Sistemi

Bir oteliniz var. Otelinizin sonsuz say da odas var. Her odan n

Transkript:

International Olympiad in Informatics 2013 6-13 July 2013 Brisbane, Australia Day 2 tasks cave Turkish 1.0 Kaldığınız yurtlardan sınavın yapılacağı yere yürürken kayboldunuz ve yanlışlıkla üniversitenin altında yer alan gizli bir mağaranın girişine geldiniz. Mağaranın girişi, birbiri arkasına ardışık yerleştirilmiş N tane kapı; ve herbiri ayrı bir kapıya bağlı N tane anahtar içeren bir güvenlik sistemi ile korunmaktadır. Kapılar, 0, 1,, (N - 1) olarak numaralanmıştır ve size en yakın kapı 0 numaralı kapıdır. Anahtarlar da 0, 1,, (N - 1) olarak numaralandırılmıştır, fakat siz hangi anahtarın hangi kapıya bağlı olduğunu bilmiyorsunuz. Anahtarlar mağaranın girişinde bulunmaktadır. Her bir anahtar ya yukarı ya da aşağı vaziyette olabilmektedir. Bu vaziyetlerden sadece birisi doğrudur. Eğer anahtar doğru vaziyette ise anahtara bağlı olan kapı açılacak; yanlış vaziyette ise anahtara bağlı olan kapı kapanacaktır. Her bir anahtar için doğru vaziyet farklı olabilir, ve siz hangi vaziyetin doğru olduğunu bilmiyorsunuz. Bu güvenlik sistemini öğrenmeye merak sardınız. Bunun için, anahtarları istediğiniz kombinasyona getirerek mağara içine doğru yürüyüp ilk kapalı kapının hangisi olduğunu görebiliyorsunuz. Kapılar şeffaf olmadığı için ilk kapalı kapıyı gördüğünüzde bu kapının arkasındaki kapıları göremiyorsunuz. Sizin göreviniz ise, en fazla 70,000 kombinasyon deneyerek, her bir anahtarın doğru vaziyetini ve her bir anahtarın bağlı olduğu kapıyı bulmaktır.

Gerçekleştirim explorecave() prosedürünü gerçekleştiren bir dosya göndermelisiniz. Bu prosedür trycombination() fonksiyonunu en fazla 70,000 kez çağırabilir ve en sonunda answer() prosedürünü çağırmalıdır. Fonksiyonlar ve prosedürler aşağıda tanımlanmıştır. Grader Fonksiyonu: trycombination() int trycombination(int S[]); function trycombination(var S: array of LongInt) : LongInt; Grader bu fonksiyonu size sağlayacaktır. Bu fonksiyon anahtarların herhangi bir vaziyet kombinasyonunu denediğinizde karşılık gelen ilk kapalı kapıyı döndürecektir. Eğer tüm kapılar açık ise, 1 döndürecektir. Bu fonksiyon O(N) zamanda çalışır. Bu fonksiyonu en fazla 70,000 kez çağırabilirsiniz. S: N uzunluğunda bir dizi, dizinin elemanları karşılık gelen anahtarın vaziyetidir. Yani, S[i] değeri i. nci anahtarın vaziyetidir. 0 değeri anahtarın yukarı, ve 1 değeri anahtarın aşağı olduğunu belirtmek içindir. Dönen değer: İlk kapalı kapının numarası, ya da eğer tüm kapılar açıksa 1.

Grader Prosedürü: answer() void answer(int S[], int D[]); procedure answer(var S, D: array of LongInt); Bu prosedürü tüm kapıları açacak anahtar vaziyeti kombinasyonu, ve her bir anahtarın bağlı olduğu kapıyı bulduğunuzda çağırmalısınız. S: N uzunluğunda bir dizi, dizinin elemanları anahtarların doğru vaziyetleri olmalıdır. Formatı trycombination() fonskiyonununda anlatılan format ile aynıdır. D: N uzunluğunda bir dizi, anahtarların bağlı olduğu kapıları belirtir. Yani, D[i] değeri i.nci anahtarın bağlı olduğu kapıdır. Dönen değer: Bu prosedür programı sonlandırdığından bir şey döndürmez. Sizin Prosedürünüz: explorecave() void explorecave(int N); procedure explorecave(n: longint); Gönderdiğiniz dosya bu fonksiyonu gerçekleştirmelidir. Bu fonksiyon, trycombination() fonksiyonunu doğru anahtar vaziyetleri ve anahtarların bağlı olduğu kapıları bulmak için çağırmalıdır. Cevabı bulduğunda ise answer() prosedürünü bir kez çağırmalıdır. N:Mağaradaki anahtar/kapı sayısı.

Örnekteki Durum Kapılar ve anahtarlar resimdeki örnekte olduğu gibi ayarlanmış olsun: Çağrılan Fonksiyon trycombination([1, 0, 1, 1]) trycombination([0, 1, 1, 0]) trycombination([1, 1, 1, 0]) answer([1, 1, 1, 0], [3, 1, 0, 2]) Dönen Değer 1 Açıklama Bu resimdeki duruma karşılık gelir: 0, 2 ve 3.ncü anahtarlar aşağı, 1. anahtar ise yukarı. Bu fonksiyon 1 döndürür, çünkü soldan sağa doğru ilk kapalı kapı 1.nci kapıdır. 3 0, 1 ve 2. kapılar açılır, fakat 3. kapı kapanır. 1 (Program sonlanır) 0. anahtarı aşağı vaziyete getirmek tüm kapıları açar ve böylelikle 1 döner. Buradan doğru kombinasyonun [1, 1, 1, 0] olduğunu, ve 0, 1, 2 ve 3 nolu anahtarların sırasıyla 3, 1, 0 ve 2 nolu kapılara bağlı olduğunu buluruz. Kısıtlar Süre sınırı: 2 saniye Hafıza sınırı: 32 MiB 1 N 5,000 Altgörevler Altgörev Puan İlave Girdi Kısıtları 1 12 2 13 3 21 N 100 4 30 N 2,000 5 24 (Kısıt yok) Her bir i.nci anahtar, i.nci kapıya bağlıdır. Sizin asıl göreviniz doğru anahtar vaziyeti kombinasyonunu bulmaktır. Doğru anahtar vaziyeti kombinasyonu her zaman [0, 0, 0,, 0] dır. Sizin asıl göreviniz hangi anahtarın hangi kapıya bağlı olduğunu bulmaktır.

Test etme Bilgisayarınızdaki örnek grader, cave.in adındaki girdi dosyasını okumaktadır. Bu dosyanın formatı: satır 1: N satır 2: S[0] S[1] S[N 1] satır 3: D[0] D[1] D[N 1] Burada N kapı/anahtar sayısıdır, S[i] ise i.nci anahtarın doğru vaziyetidir, ve D[i] ise i.nci anahtarın bağlı olduğu kapıdır. Örneğin, yukarıdaki ilk örnek aşağıdaki formatta verilmelidir: 4 1 1 1 0 3 1 0 2 Programlama Dili Notları "cave.h" dosyasını include etmelisiniz. Önce unit Cave i tanımlamalısınız, ayrıca grader prosedürlerini uses GraderHelpLib ile import etmelisiniz. Bütün dizi indisleri 0'dan başlar. Örnekler için bilgisayarınızdaki çözüm şablonlarını inceleyebilirsiniz.