مخبأ عام مع أولوية ومدة صلاحية
C#
Hard
generics
مهمة «مخبأ عام مع أولوية ومدة صلاحية»
```html
نفذ الفئة العامة Cache<TKey, TValue>، التي تخزن العناصر مع زمن حياة محدد (TimeToLive) وأولوية (int). عند إضافة عنصر، إذا تجاوزت الذاكرة المؤقتة الحجم الأقصى، يتم حذف العنصر ذو الأولوية الأصغر، وفي حالة تساوي الأولوية، يتم حذف الأقدم. عند انتهاء TimeToLive، يعتبر العنصر منتهي الصلاحية ولا يتم إرجاعه عند الطلب. الطرق: Add(TKey key, TValue value, int priority) — تضيف أو تحدث عنصرًا؛ TryGet(TKey key, out TValue value) — ترجع true إذا كان المفتاح موجودًا ولم ينته صلاحيته، وإلا ترجع false؛ RemoveExpired() — تحذف جميع العناصر منتهية الصلاحية. نفذ أمان الخيوط باستخدام الأقفال.
```
نفذ الفئة العامة Cache<TKey, TValue>، التي تخزن العناصر مع زمن حياة محدد (TimeToLive) وأولوية (int). عند إضافة عنصر، إذا تجاوزت الذاكرة المؤقتة الحجم الأقصى، يتم حذف العنصر ذو الأولوية الأصغر، وفي حالة تساوي الأولوية، يتم حذف الأقدم. عند انتهاء TimeToLive، يعتبر العنصر منتهي الصلاحية ولا يتم إرجاعه عند الطلب. الطرق: Add(TKey key, TValue value, int priority) — تضيف أو تحدث عنصرًا؛ TryGet(TKey key, out TValue value) — ترجع true إذا كان المفتاح موجودًا ولم ينته صلاحيته، وإلا ترجع false؛ RemoveExpired() — تحذف جميع العناصر منتهية الصلاحية. نفذ أمان الخيوط باستخدام الأقفال.
```
تنسيق الإدخال
السطر الأول: الحجم الأقصى للذاكرة المؤقتة (int) ومدة الحياة بالثواني (int).
السطر الثاني: عدد الأوامر N (int).
بعد ذلك N من الأسطر، كل أمر: 'add key value priority' أو 'get key' أو 'remove_expired'.
تنسيق الإخراج
لكل أمر 'get'، أخرج القيمة إذا تم العثور على المفتاح ولم ينتهِ صلاحيته، وإلا أخرج 'null'.
لأمر 'remove_expired'، أخرج عدد العناصر التي تم حذفها.
لأمر 'add'، لا تخرج شيئًا.
أمثلة
مثال 1
الإدخال
3 5
8
add a 10 1
add b 20 2
get a
add c 30 3
add d 40 1
get b
get d
remove_expired
الإخراج
10
null
40
1
مثال 2
الإدخال
2 10
6
add x 100 5
add y 200 5
get x
add z 300 5
get y
get z
الإخراج
100
null
300
main.cs