#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;
class Cache {
private:
vector<pair<int, int>> memory; // pair<value, index>
const int MAX_SIZE = 20;
public:
void add(int number, int index) {
if (memory.size() >= MAX_SIZE) {
memory.erase(memory.begin());
}
memory.push_back({number, index});
}
bool checkCache(int index, int& number) {
for (const auto& entry : memory) {
if (entry.second == index) {
number = entry.first;
return true;
}
}
return false;
}
};
int main() {
Cache cache;
map<int, int> mainMemory;
string word;
// خواندن حافظه اصلی
while (cin >> word) {
if (word == "end") break;
int number = stoi(word);
int index;
if (!(cin >> index)) {
cerr << "Invalid input for index.\n";
return 1;
}
mainMemory[index] = number;
}
// پردازش درخواستها
while (cin >> word) {
if (word == "end") break;
if (word == "give") {
int index;
if (!(cin >> index)) {
cerr << "Invalid input for give index.\n";
return 1;
}
int number;
if (cache.checkCache(index, number)) {
cout << "hit with " << number << endl;
} else {
if (mainMemory.find(index) != mainMemory.end()) {
number = mainMemory[index];
cache.add(number, index);
cout << "miss with " << number << endl;
} else {
cout << "miss with 0" << endl;
}
}
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQ2FjaGUgewpwcml2YXRlOgogICAgdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiBtZW1vcnk7IC8vIHBhaXI8dmFsdWUsIGluZGV4PgogICAgY29uc3QgaW50IE1BWF9TSVpFID0gMjA7CgpwdWJsaWM6CiAgICB2b2lkIGFkZChpbnQgbnVtYmVyLCBpbnQgaW5kZXgpIHsKICAgICAgICBpZiAobWVtb3J5LnNpemUoKSA+PSBNQVhfU0laRSkgewogICAgICAgICAgICBtZW1vcnkuZXJhc2UobWVtb3J5LmJlZ2luKCkpOwogICAgICAgIH0KICAgICAgICBtZW1vcnkucHVzaF9iYWNrKHtudW1iZXIsIGluZGV4fSk7CiAgICB9CgogICAgYm9vbCBjaGVja0NhY2hlKGludCBpbmRleCwgaW50JiBudW1iZXIpIHsKICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogbWVtb3J5KSB7CiAgICAgICAgICAgIGlmIChlbnRyeS5zZWNvbmQgPT0gaW5kZXgpIHsKICAgICAgICAgICAgICAgIG51bWJlciA9IGVudHJ5LmZpcnN0OwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9OwoKaW50IG1haW4oKSB7CiAgICBDYWNoZSBjYWNoZTsKICAgIG1hcDxpbnQsIGludD4gbWFpbk1lbW9yeTsKICAgIHN0cmluZyB3b3JkOwoKICAgIC8vINiu2YjYp9mG2K/ZhiDYrdin2YHYuNmHINin2LXZhNuMCiAgICB3aGlsZSAoY2luID4+IHdvcmQpIHsKICAgICAgICBpZiAod29yZCA9PSAiZW5kIikgYnJlYWs7CiAgICAgICAgaW50IG51bWJlciA9IHN0b2kod29yZCk7CiAgICAgICAgaW50IGluZGV4OwogICAgICAgIGlmICghKGNpbiA+PiBpbmRleCkpIHsKICAgICAgICAgICAgY2VyciA8PCAiSW52YWxpZCBpbnB1dCBmb3IgaW5kZXguXG4iOwogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgbWFpbk1lbW9yeVtpbmRleF0gPSBudW1iZXI7CiAgICB9CgogICAgLy8g2b7Ysdiv2KfYsti0INiv2LHYrtmI2KfYs9iq4oCM2YfYpwogICAgd2hpbGUgKGNpbiA+PiB3b3JkKSB7CiAgICAgICAgaWYgKHdvcmQgPT0gImVuZCIpIGJyZWFrOwogICAgICAgIGlmICh3b3JkID09ICJnaXZlIikgewogICAgICAgICAgICBpbnQgaW5kZXg7CiAgICAgICAgICAgIGlmICghKGNpbiA+PiBpbmRleCkpIHsKICAgICAgICAgICAgICAgIGNlcnIgPDwgIkludmFsaWQgaW5wdXQgZm9yIGdpdmUgaW5kZXguXG4iOwogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaW50IG51bWJlcjsKICAgICAgICAgICAgaWYgKGNhY2hlLmNoZWNrQ2FjaGUoaW5kZXgsIG51bWJlcikpIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgImhpdCB3aXRoICIgPDwgbnVtYmVyIDw8IGVuZGw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAobWFpbk1lbW9yeS5maW5kKGluZGV4KSAhPSBtYWluTWVtb3J5LmVuZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgbnVtYmVyID0gbWFpbk1lbW9yeVtpbmRleF07CiAgICAgICAgICAgICAgICAgICAgY2FjaGUuYWRkKG51bWJlciwgaW5kZXgpOwogICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgIm1pc3Mgd2l0aCAiIDw8IG51bWJlciA8PCBlbmRsOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBjb3V0IDw8ICJtaXNzIHdpdGggMCIgPDwgZW5kbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMDsKfQo=