Seif
문제
Arheoloogid leidsid merre uppunud laevalt seifi, millel on väga omapärane digitaalne lukk. Luku ekraanil on kaks ühepikkust täisarvu, mis aeg-ajalt muutuvad. Uurijad on märganud, et ekraani oleku muutusi on kolme liiki:
- kummalegi arvule lisandub paremale üks number;
- mõlemal arvul kustub paremalt mingi arv numbreid;
- ekraanile ilmub kolmas arv ja selle kõrvale ühe numbri suurune sisestusväli.
Uurijatel tekkis hüpotees, et seifi avamiseks tuleb sisestusvälja sisestada kahe suure arvu summast see number, mille positsiooni näitab kolmas arv. Kuna andmed ekraanil muutuvad käsitsi arvutamiseks liiga kiiresti, on nüüd vaja programmi, mis küsimustele vastaks.
Selle programmi põhikomponent on teek, mis reageerib seifi ekraanil toimuvatele sündmustele. Sinu ülesanne ongi kirjutada teek, mille järgnevaid funktsioone kutsutakse välja kokku korda:
| Funktsioon | Kirjeldus |
|---|---|
void Add(int f, int s) |
Esimesele pikale arvule lisandus paremale number ja teisele number . |
void Del(int k) |
Mõlemast pikast arvust kadusid parempoolset numbrit. Võib eeldada, et selle funktsiooni kasutamise hetkel on suured arvud vähemalt -kohalised. On võimalik, et sellega ei jäänud neisse üldse numbreid. |
int Get(int p) |
Ekraanile ilmus kolmas arv . Funktsioon peab tagastama kahe pika arvu summas paremalt . kohal oleva numbri. Võib eeldada, et selle funktsiooni kasutamise hetkel on summa vähemalt -kohaline. |
Testimiskeskkonnas on näitefailid, kus vajalikud funktsioonid on juba kirjeldatud ja lahendusena on vaja kirjutada ainult nende realisatsioonid. Lisaks võib lahenduse faili kirjutada ka oma funktsioone. Oma lahenduse oma arvutis testimiseks on ka hindamisprogrammi näide, mille sisendi ja väljundi kirjeldus on toodud allpool (serveris on kasutusel teine hindamisprogramm, mis kontrollib ka lahenduse tagastatud vastuste õigsust). Oma lahenduse oma arvutis kompileerimiseks ja testimiseks:
| Keel | Lahendus | Käsurida |
|---|---|---|
| C++ | seif.cpp |
|
입력
Tekstifaili esimesel real on teegi funktsioonide väljakutsete arv () ja järgmisel real igaühel ühe väljakutse kirjeldus:
- Rida kujul
1(, ) tähendab kutsetAdd(f, s). - Rida kujul
2() tähendab kutsetDel(k). - Rida kujul
3() tähendab kutsetGet(p).
출력
Tekstifaili väljastatakse hindamisprogrammi ja teegi vahelise suhtluse logi.
예제
예제 1
5 1 1 1 3 1 1 3 9 3 1 3 2
add(1, 1) get(1) = 2 add(3, 9) get(1) = 2 get(2) = 3
예제 2
10 1 1 1 1 2 2 1 3 3 3 1 3 2 3 3 2 2 1 4 6 3 1 3 2
add(1, 1) add(2, 2) add(3, 3) get(1) = 6 get(2) = 4 get(3) = 2 del(2) add(4, 6) get(1) = 0 get(2) = 3