9
9
* Platform : Codeforces/Codejam
10
10
* Ref : N/A
11
11
*/
12
+ class Entry {
13
+ String value ;
14
+ long expiredAt ;
15
+
16
+ public Entry (String value , long expiredAt ){
17
+ this .value = value ;
18
+ this .expiredAt = expiredAt ;
19
+ }
20
+
21
+ @ Override
22
+ public String toString (){
23
+ return "Entry{ value:" + value + ", expiredAt: " + expiredAt + "}" ;
24
+ }
25
+ }
26
+
27
+ class InMemoryDB {
28
+
29
+ HashMap <String , HashMap <String , Entry >> cache = new HashMap <>();
30
+
31
+ InMemoryDB (){
32
+ }
33
+
34
+ void addEntry (long timestamp , String key , String field , String value , long ttl ){
35
+ long expiredAt = timestamp + ttl ;
36
+ var entries = new HashMap <String , Entry >();
37
+ if (cache .containsKey (key )) {
38
+ entries = (HashMap <String , Entry >)cache .get (key );
39
+ }
40
+ entries .put (field , new Entry (value , expiredAt ));
41
+ cache .put (key , entries );
42
+ }
43
+
44
+ void evictIfExpired (long timestamp , String key , String field ) {
45
+ var entries = (HashMap <String , Entry >)cache .get (key );
46
+ Entry entry = (Entry ) entries .get (field );
47
+ if (entry .expiredAt <= timestamp ){
48
+ entries .remove (field );
49
+ cache .put (key , entries );
50
+ }
51
+ }
52
+
53
+ boolean deleteEntry (long timestamp , String key , String field ){
54
+ if (cache .containsKey (key )) {
55
+ var entries = (HashMap <String , Entry >)cache .get (key );
56
+ evictIfExpired (timestamp , key , field );
57
+ if (entries .containsKey (field )){
58
+ entries .remove (field );
59
+ cache .put (key , entries );
60
+ return true ;
61
+ }else {
62
+ return false ;
63
+ }
64
+ }
65
+ return false ;
66
+ }
67
+
68
+ List <Entry > scan (long timestamp , String key ){
69
+ // similarly O(N) iterate and evictIfExpired and return values
70
+ return null ;
71
+ }
72
+
73
+ }
12
74
13
75
public class Solution {
14
76
@@ -34,15 +96,42 @@ public Solution(boolean stdIO)throws FileNotFoundException{
34
96
in = new FastReader (inputStream );
35
97
out = new PrintWriter (outputStream );
36
98
}
37
-
38
99
void run ()throws Exception {
39
100
int tests = i ();
40
101
test :
41
102
for (int testId = 1 ; testId <= tests ; testId ++){
42
103
// Codejam / Hackercup formatting
43
104
// out.write("Case #" + testId + ": ");
44
- long ans = 0 ;
45
- out .write (ans + "\n " );
105
+ Random rng = new Random ();
106
+ InMemoryDB database = new InMemoryDB ();
107
+
108
+ for (int operations = 1 ; operations <= 1000 ; operations ++){
109
+ long timestamp = operations * operations ;
110
+ switch (rng .nextInt (4 )){
111
+ // add
112
+ case 0 : {
113
+ long ttl = rng .nextLong ((int )1e9 );
114
+ String key = "key_" + rng .nextInt (100 );// random key
115
+ String field = "field_" + rng .nextInt (100 );// random field
116
+ String value = "value_" + rng .nextInt (100 );// random field
117
+
118
+ database .addEntry (timestamp , key , field , value , ttl );
119
+ break ;
120
+ }
121
+ // delete
122
+ case 1 : {
123
+ String key = "key_" + rng .nextInt (100 );// random key
124
+ String field = "field_" + rng .nextInt (100 );// random field
125
+ database .deleteEntry (timestamp , key , field );
126
+ break ;
127
+ }
128
+ // TODO: Scan disctionary
129
+ default : {
130
+ break ;
131
+ }
132
+ }
133
+ }
134
+ // out.write(ans + "\n");
46
135
}
47
136
}
48
137
0 commit comments