/*
* プログラミングのお題スレ Part11
* https://m...content-available-to-author-only...h.net/test/read.cgi/tech/1524570314/599
* 599 名前:デフォルトの名無しさん[sage] 投稿日:2018/07/14(土) 15:13:06.98 ID:QznZ4U7X
* 1から100までの数字から4つを取り出したそれぞれに番号を振る速い方法ありますか?
* メモリもあまり使わずに
*
* 1 2 3 4 -> 1
* 1 2 3 5 -> 2
* 1 2 3 6 -> 3
*
* 96 97 98 99 -> 3921221
* 96 97 98 100 -> 3921222
* 96 97 99 100 -> 3921223
* 96 98 99 100 -> 3921224
* 97 98 99 100 -> 3921225
**/
class Ideone
{
public static void main
(String[] args
) {
int i = 1;
for (int a = 1; a <= 100; a++)
{
for (int b = a + 1; b <= 100; b++)
{
for (int c = b + 1; c <= 100; c++)
{
for (int d = c + 1; d <= 100; d++)
{
int j = h(a, b, c, d);
if (j
<= 6 || j
>= 3921220) System.
out.
printf("%d %d %d %d: %d%n", a, b, c, d, j
); if (j
!= i
++) System.
out.
println("error"); }
}
}
}
}
static int h(int a, int b, int c, int d)
{
assert a >= 1 & d <= 100 & a < b & b < c & c < d;
a = (100 - a) * (99 - a) * (98 - a) * (97 - a);
b = (100 - b) * (99 - b) * (98 - b) * 4;
c = (100 - c) * (99 - c) * 12;
d = (100 - d) * 24;
return 3921225 - (a + b + c + d) / 24;
}
}
LyoKICog44OX44Ot44Kw44Op44Of44Oz44Kw44Gu44GK6aGM44K544OsIFBhcnQxMSAKICogaHR0cHM6Ly9tLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5oLm5ldC90ZXN0L3JlYWQuY2dpL3RlY2gvMTUyNDU3MDMxNC81OTkKICogNTk5IOWQjeWJje+8muODh+ODleOCqeODq+ODiOOBruWQjeeEoeOBl+OBleOCk1tzYWdlXSDmipXnqL/ml6XvvJoyMDE4LzA3LzE0KOWcnykgMTU6MTM6MDYuOTggSUQ6UXpuWjRVN1gKICogMeOBi+OCiTEwMOOBvuOBp+OBruaVsOWtl+OBi+OCiTTjgaTjgpLlj5bjgorlh7rjgZfjgZ/jgZ3jgozjgZ7jgozjgavnlarlj7fjgpLmjK/jgovpgJ/jgYTmlrnms5XjgYLjgorjgb7jgZnjgYvvvJ8KICog44Oh44Oi44Oq44KC44GC44G+44KK5L2/44KP44Ga44GrCiAqIAogKiAxIDIgMyA0IC0+IDEKICogMSAyIDMgNSAtPiAyCiAqIDEgMiAzIDYgLT4gMwogKiAKICogOTYgOTcgOTggOTkgLT4gMzkyMTIyMQogKiA5NiA5NyA5OCAxMDAgLT4gMzkyMTIyMgogKiA5NiA5NyA5OSAxMDAgLT4gMzkyMTIyMwogKiA5NiA5OCA5OSAxMDAgLT4gMzkyMTIyNAogKiA5NyA5OCA5OSAxMDAgLT4gMzkyMTIyNQogKiovCmNsYXNzIElkZW9uZQp7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKQogICAgewogICAgICAgIGludCBpID0gMTsKICAgICAgICBmb3IgKGludCBhID0gMTsgYSA8PSAxMDA7IGErKykKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoaW50IGIgPSBhICsgMTsgYiA8PSAxMDA7IGIrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yIChpbnQgYyA9IGIgKyAxOyBjIDw9IDEwMDsgYysrKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGQgPSBjICsgMTsgZCA8PSAxMDA7IGQrKykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBqID0gaChhLCBiLCBjLCBkKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPD0gNiB8fCBqID49IDM5MjEyMjApIFN5c3RlbS5vdXQucHJpbnRmKCIlZCAlZCAlZCAlZDogJWQlbiIsIGEsIGIsIGMsIGQsIGopOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiAhPSBpKyspIFN5c3RlbS5vdXQucHJpbnRsbigiZXJyb3IiKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgc3RhdGljIGludCBoKGludCBhLCBpbnQgYiwgaW50IGMsIGludCBkKQogICAgewogICAgICAgIGFzc2VydCBhID49IDEgJiBkIDw9IDEwMCAmIGEgPCBiICYgYiA8IGMgJiBjIDwgZDsKICAgICAgICBhID0gKDEwMCAtIGEpICogKDk5IC0gYSkgKiAoOTggLSBhKSAqICg5NyAtIGEpOwogICAgICAgIGIgPSAoMTAwIC0gYikgKiAoOTkgLSBiKSAqICg5OCAtIGIpICogNDsKICAgICAgICBjID0gKDEwMCAtIGMpICogKDk5IC0gYykgKiAxMjsKICAgICAgICBkID0gKDEwMCAtIGQpICogMjQ7CiAgICAgICAgcmV0dXJuIDM5MjEyMjUgLSAoYSArIGIgKyBjICsgZCkgLyAyNDsKICAgIH0KfQo=