/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class MyList<T> {
Node<T> begin, end;
void add(T payload) {
if (begin == null) {
begin = new Node(payload, null);
end = begin;
} else {
end.next = new Node(payload, null);
end = end.next;
}
}
}
class Node<T> {
T payload;
Node<T> next;
public Node(T payload, Node<T> next) {
this.payload = payload;
this.next = next;
}
}
class Ideone
{
static <T> T nthElemFast(MyList<T> list, int n) {
Node
<T
> tmp
= list.
begin; List
<T
> enumerated
= new ArrayList();
while (tmp != null) {
enumerated.add(tmp.payload);
tmp = tmp.next;
}
if (n >= enumerated.size()) {
}
return enumerated.get(enumerated.size() - (n + 1));
}
static <T> T nthElemSlow(MyList<T> list, int n) {
Node<T> tmp = list.begin; int cnt = 0;
while (tmp != null) {
tmp = tmp.next;
++cnt;
}
if (n >= cnt) {
}
tmp = list.begin;
for (int i = 0; i < cnt - (n + 1); ++i) {
tmp = tmp.next;
}
return tmp.payload;
}
{
MyList<Integer> singularElement = new MyList();
singularElement.add(1);
int a = nthElemFast(singularElement, 0);
int b = nthElemSlow(singularElement, 1);
System.
out.
println(a
+ ", " + b
); assert(a == b); assert(a == 1);
MyList<Integer> lotsOfElements = new MyList();
singularElement.add(1); singularElement.add(2);
singularElement.add(3); singularElement.add(4);
int c = nthElemFast(singularElement, 1);
int d = nthElemFast(singularElement, 3);
int e = nthElemSlow(singularElement, 1);
int f = nthElemSlow(singularElement, 3);
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgTXlMaXN0PFQ+IHsKCU5vZGU8VD4gYmVnaW4sIGVuZDsKCQoJdm9pZCBhZGQoVCBwYXlsb2FkKSB7CgkJaWYgKGJlZ2luID09IG51bGwpIHsKCQkJYmVnaW4gPSBuZXcgTm9kZShwYXlsb2FkLCBudWxsKTsKCQkJZW5kID0gYmVnaW47CgkJfSBlbHNlIHsKCQkJZW5kLm5leHQgPSBuZXcgTm9kZShwYXlsb2FkLCBudWxsKTsKCQkJZW5kID0gZW5kLm5leHQ7CgkJfQoJfQp9CgpjbGFzcyBOb2RlPFQ+IHsKCVQgcGF5bG9hZDsKCU5vZGU8VD4gbmV4dDsKCQoJcHVibGljIE5vZGUoVCBwYXlsb2FkLCBOb2RlPFQ+IG5leHQpIHsKCQl0aGlzLnBheWxvYWQgPSBwYXlsb2FkOwoJCXRoaXMubmV4dCA9IG5leHQ7Cgl9Cn0KCmNsYXNzIElkZW9uZQp7CglzdGF0aWMgPFQ+IFQgbnRoRWxlbUZhc3QoTXlMaXN0PFQ+IGxpc3QsIGludCBuKSB7CgkJTm9kZTxUPiB0bXAgPSBsaXN0LmJlZ2luOyBMaXN0PFQ+IGVudW1lcmF0ZWQgPSBuZXcgQXJyYXlMaXN0KCk7CgkJCgkJd2hpbGUgKHRtcCAhPSBudWxsKSB7CgkJCWVudW1lcmF0ZWQuYWRkKHRtcC5wYXlsb2FkKTsKCQkJdG1wID0gdG1wLm5leHQ7CgkJfQoJCQoJCWlmIChuID49IGVudW1lcmF0ZWQuc2l6ZSgpKSB7CgkJCXRocm93IG5ldyBJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uKCk7CgkJfQoJCQoJCXJldHVybiBlbnVtZXJhdGVkLmdldChlbnVtZXJhdGVkLnNpemUoKSAtIChuICsgMSkpOwoJfQoJCglzdGF0aWMgPFQ+IFQgbnRoRWxlbVNsb3coTXlMaXN0PFQ+IGxpc3QsIGludCBuKSB7CgkJTm9kZTxUPiB0bXAgPSBsaXN0LmJlZ2luOyBpbnQgY250ID0gMDsKCQkKCQl3aGlsZSAodG1wICE9IG51bGwpIHsKCQkJdG1wID0gdG1wLm5leHQ7CgkJCSsrY250OwoJCX0KCQkKCQlpZiAobiA+PSBjbnQpIHsKCQkJdGhyb3cgbmV3IEluZGV4T3V0T2ZCb3VuZHNFeGNlcHRpb24oKTsKCQl9CgkJCgkJdG1wID0gbGlzdC5iZWdpbjsKCQkKCQlmb3IgKGludCBpID0gMDsgaSA8IGNudCAtIChuICsgMSk7ICsraSkgewoJCQl0bXAgPSB0bXAubmV4dDsKCQl9CgkJCgkJcmV0dXJuIHRtcC5wYXlsb2FkOwoJfQoJCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKCQlNeUxpc3Q8SW50ZWdlcj4gc2luZ3VsYXJFbGVtZW50ID0gbmV3IE15TGlzdCgpOwoJCXNpbmd1bGFyRWxlbWVudC5hZGQoMSk7CgkJaW50IGEgPSBudGhFbGVtRmFzdChzaW5ndWxhckVsZW1lbnQsIDApOwoJCWludCBiID0gbnRoRWxlbVNsb3coc2luZ3VsYXJFbGVtZW50LCAxKTsKCQkKCQlTeXN0ZW0ub3V0LnByaW50bG4oYSArICIsICIgKyBiKTsKCQlhc3NlcnQoYSA9PSBiKTsgYXNzZXJ0KGEgPT0gMSk7CgkJCgkJTXlMaXN0PEludGVnZXI+IGxvdHNPZkVsZW1lbnRzID0gbmV3IE15TGlzdCgpOwoJCXNpbmd1bGFyRWxlbWVudC5hZGQoMSk7IHNpbmd1bGFyRWxlbWVudC5hZGQoMik7CgkJc2luZ3VsYXJFbGVtZW50LmFkZCgzKTsgc2luZ3VsYXJFbGVtZW50LmFkZCg0KTsKCQlpbnQgYyA9IG50aEVsZW1GYXN0KHNpbmd1bGFyRWxlbWVudCwgMSk7CgkJaW50IGQgPSBudGhFbGVtRmFzdChzaW5ndWxhckVsZW1lbnQsIDMpOwoJCWludCBlID0gbnRoRWxlbVNsb3coc2luZ3VsYXJFbGVtZW50LCAxKTsKCQlpbnQgZiA9IG50aEVsZW1TbG93KHNpbmd1bGFyRWxlbWVudCwgMyk7CgkJCgl9Cn0=