TOP > その他
サイコロ(Dice)
説明
サイコロを転がします(うく)
計算量
- $O(1)$
実装例
struct Dice
{
// int x, y;
int l, r, f, b, d, u;
void RollN()
{
// --y;
int buff = d;
d = f;
f = u;
u = b;
b = buff;
}
void RollS()
{
// ++y;
int buff = d;
d = b;
b = u;
u = f;
f = buff;
}
void RollL() // ----->
{
int buff = f;
f = l;
l = b;
b = r;
r = buff;
}
void RollR() // <------
{
int buff = f;
f = r;
r = b;
b = l;
l = buff;
}
void RollE() // .o -> o.
{
// --x;
int buff = d;
d = l;
l = u;
u = r;
r = buff;
}
void RollW() // o. -> .o
{
// ++x;
int buff = d;
d = r;
r = u;
u = l;
l = buff;
}
vector< Dice > makeDice()
{
vector< Dice > ret;
for(int i = 0; i < 6; i++) {
Dice d(*this);
if(i == 1) d.RollN();
if(i == 2) d.RollS();
if(i == 3) d.RollS(), d.RollS();
if(i == 4) d.RollL();
if(i == 5) d.RollR();
for(int j = 0; j < 4; j++) {
ret.emplace_back(d);
d.RollE();
}
}
return (ret);
}
};