/* 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 MatrixTest
{
public int width;
public int height;
public int m[];
public MatrixTest(int w, int h) {
this.width = w;
this.height = h;
this.m = new int[w * h];
}
public int get(int x, int y) {
return this.m[y * width + x];
}
public void set(int x, int y, int value) {
this.m[y * width + x] = value;
}
public static void main1
(String[] args
) { int w = 100, h = 200, passes = 400;
int matrix[][] = new int[h][];
for (int i = 0; i < h; ++i) {
matrix[i] = new int[w];
}
long start;
start
= System.
currentTimeMillis();
// X and Y are inverted.
for (int z = 0; z < passes; z++) {
for (int x = 0; x < w; x++) {
for (int y = 0; y < h; y++) {
matrix[y][x]++;
}
}
}
System.
out.
print("\t" + (System.
currentTimeMillis() - start
));
//
MatrixTest mt = new MatrixTest(w, h);
start
= System.
currentTimeMillis();
for (int z = 0; z < passes; z++) {
for (int x = 0; x < w; x++) {
for (int y = 0; y < h; y++) {
mt.set(x, y, mt.get(x, y) + 1);
}
}
}
System.
out.
print("\t" + (System.
currentTimeMillis() - start
));
//
MatrixTest mt2 = new MatrixTest(w, h);
start
= System.
currentTimeMillis();
for (int z = 0; z < passes; z++) {
for (int x = 0; x < w; x++) {
for (int y = 0; y < h; y++) {
int wp = y * w + x;
mt2.m[wp]++;
}
}
}
System.
out.
print("\t" + (System.
currentTimeMillis() - start
)); }
public static void main
(String[] args
) { for(int i=0; i< 50; i++){
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgTWF0cml4VGVzdAp7CiAgICAgICAgcHVibGljIGludCB3aWR0aDsKICAgICAgICBwdWJsaWMgaW50IGhlaWdodDsKICAgICAgICBwdWJsaWMgaW50IG1bXTsKICAgICAgIAogICAgICAgIHB1YmxpYyBNYXRyaXhUZXN0KGludCB3LCBpbnQgaCkgewogICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHc7CiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IGg7CiAgICAgICAgICAgICAgICB0aGlzLm0gPSBuZXcgaW50W3cgKiBoXTsKICAgICAgICB9CiAgICAgICAKICAgICAgICBwdWJsaWMgaW50IGdldChpbnQgeCwgaW50IHkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1beSAqIHdpZHRoICsgeF07CiAgICAgICAgfQogICAgICAgCiAgICAgICAgcHVibGljIHZvaWQgc2V0KGludCB4LCBpbnQgeSwgaW50IHZhbHVlKSB7CiAgICAgICAgICAgICAgICB0aGlzLm1beSAqIHdpZHRoICsgeF0gPSB2YWx1ZTsKICAgICAgICB9CiAgICAgICAKICAgICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbjEgKFN0cmluZ1tdIGFyZ3MpIHsKICAgICAgICAgICAgICAgIGludCB3ID0gMTAwLCBoID0gMjAwLCBwYXNzZXMgPSA0MDA7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgaW50IG1hdHJpeFtdW10gPSBuZXcgaW50W2hdW107CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBoOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4W2ldID0gbmV3IGludFt3XTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBsb25nIHN0YXJ0OwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gWCBhbmQgWSBhcmUgaW52ZXJ0ZWQuCiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZm9yIChpbnQgeiA9IDA7IHogPCBwYXNzZXM7IHorKykgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXhbeV1beF0rKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50KCJcdCIgKyAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydCkpOwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgTWF0cml4VGVzdCBtdCA9IG5ldyBNYXRyaXhUZXN0KHcsIGgpOwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHN0YXJ0ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgZm9yIChpbnQgeiA9IDA7IHogPCBwYXNzZXM7IHorKykgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHc7IHgrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaDsgeSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdC5zZXQoeCwgeSwgbXQuZ2V0KHgsIHkpICsgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludCgiXHQiICsgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnQpKTsKICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIE1hdHJpeFRlc3QgbXQyID0gbmV3IE1hdHJpeFRlc3QodywgaCk7CiAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgc3RhcnQgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBmb3IgKGludCB6ID0gMDsgeiA8IHBhc3NlczsgeisrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgdzsgeCsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoOyB5KyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCWludCB3cCA9IHkgKiB3ICsgeDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10Mi5tW3dwXSsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnQoIlx0IiArIChTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIHN0YXJ0KSk7CiAgICAgICAgfQogICAgICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgCWZvcihpbnQgaT0wOyBpPCA1MDsgaSsrKXsKICAgICAgICAJICAgbWFpbjEobmV3IFN0cmluZ1tdeyIifSk7CgkgICAgICAgIAlTeXN0ZW0ub3V0LnByaW50bG4oIlx0Iik7CiAgICAgICAgCX0KICAgICAgICB9ICAgICAgICAKCn0=