#include <iostream>
#include <vector>
#include <cstdint>
#include <algorithm>
#include <random>
typedef std::vector<std::int64_t> DType;
DType MakeArray(unsigned int Seed = std::mt19937::default_seed) {
std::mt19937 mt(Seed);
DType D{ 0,1,2,3,4,5,6,7,8,9 };
std::shuffle(D.begin(), D.end(), mt);
return D;
}
template<class INT=std::uint64_t>
INT GetRandom(const INT& Under, const INT& Upper) {
static std::random_device rd;
static std::mt19937 mt(rd());
std::uniform_int_distribution<INT> UI(Under, Upper);
return UI(mt);
}
bool Show(const DType& A,const std::uint64_t& B,const std::uint64_t& C,const std::uint64_t& D,const DType& R) {
std::cout << "[Idx:" << B << " N:" << C << " Far:" << D << "] ";
for (auto& o : A)std::cout << o << ' ';
std::cout << " -> ";
for (auto& o : R)std::cout << o << ' ';
std::cout << std::endl;
return true;
}
DType MakeHoge(const DType& A,const std::uint64_t& B,const std::uint64_t& C,const std::uint64_t& D) {
if (A.size() == 0)return A;
DType T = A;
std::rotate(T.begin(), T.begin() + B, T.end());
DType V{ T.begin(),T.begin()+(C) };
if (C == 0)return A;
T.erase(T.begin(), T.begin()+(C));
T.insert(T.begin() + (D%T.size()), V.begin(), V.end());
std::rotate(T.begin(), T.begin() +(T.size()- B), T.end());
return T;
}
int main()
{
DType A{ 0,1,2,3,4,5,6,7,8,9 };
std::uint64_t B, C, D;
DType R;
B = 3;
C = 1;
D = 5;
R = MakeHoge(A, B, C, D);
Show(A, B, C, D, R);
B = 1;
C = 3;
D = 1;
R = MakeHoge(A, B, C, D);
Show(A, B, C, D, R);
B = 7;
C = 1;
D = 5;
R = MakeHoge(A, B, C, D);
Show(A, B, C, D, R);
B = 0;
C = 8;
D = 1;
R = MakeHoge(A, B, C, D);
Show(A, B, C, D, R);
B = 4;
C = 5;
D = 4;
R = MakeHoge(A, B, C, D);
Show(A, B, C, D, R);
B = 9;
C = 5;
D = 4;
R = MakeHoge(A, B, C, D);
Show(A, B, C, D, R);
B = 7;
C = 3;
D = 1;
R = MakeHoge(A, B, C, D);
Show(A, B, C, D, R);
std::cout << std::endl;
for (std::size_t i = 0; i < 10; i++) {
A = DType{ 0,1,2,3,4,5,6,7,8,9 };
B = GetRandom<std::uint64_t>(0, 9);
C = GetRandom<std::uint64_t>(0, 9);
D = GetRandom<std::uint64_t>(0, 9);
R = MakeHoge(A, B, C, D);
Show(A, B, C, D, R);
}
for (std::size_t i = 0; i < 10; i++) {
A = MakeArray(i);
B = GetRandom<std::uint64_t>(0, 9);
C = GetRandom<std::uint64_t>(0, 9);
D = GetRandom<std::uint64_t>(0, 9);
R = MakeHoge(A, B, C, D);
Show(A, B, C, D, R);
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y3N0ZGludD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHJhbmRvbT4KCnR5cGVkZWYgc3RkOjp2ZWN0b3I8c3RkOjppbnQ2NF90PiBEVHlwZTsKCkRUeXBlIE1ha2VBcnJheSh1bnNpZ25lZCBpbnQgU2VlZCA9IHN0ZDo6bXQxOTkzNzo6ZGVmYXVsdF9zZWVkKSB7CglzdGQ6Om10MTk5MzcgbXQoU2VlZCk7CglEVHlwZSBEeyAwLDEsMiwzLDQsNSw2LDcsOCw5IH07CgoJc3RkOjpzaHVmZmxlKEQuYmVnaW4oKSwgRC5lbmQoKSwgbXQpOwoKCXJldHVybiBEOwoKfQoKdGVtcGxhdGU8Y2xhc3MgSU5UPXN0ZDo6dWludDY0X3Q+CklOVCBHZXRSYW5kb20oY29uc3QgSU5UJiBVbmRlciwgY29uc3QgSU5UJiBVcHBlcikgewoJc3RhdGljIHN0ZDo6cmFuZG9tX2RldmljZSByZDsKCXN0YXRpYyBzdGQ6Om10MTk5MzcgbXQocmQoKSk7CglzdGQ6OnVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxJTlQ+IFVJKFVuZGVyLCBVcHBlcik7CgoJcmV0dXJuIFVJKG10KTsKfQoKYm9vbCBTaG93KGNvbnN0IERUeXBlJiBBLGNvbnN0IHN0ZDo6dWludDY0X3QmIEIsY29uc3Qgc3RkOjp1aW50NjRfdCYgQyxjb25zdCBzdGQ6OnVpbnQ2NF90JiBELGNvbnN0IERUeXBlJiBSKSB7CglzdGQ6OmNvdXQgPDwgIltJZHg6IiA8PCBCIDw8ICIgTjoiIDw8IEMgPDwgIiBGYXI6IiA8PCBEIDw8ICJdICI7Cglmb3IgKGF1dG8mIG8gOiBBKXN0ZDo6Y291dCA8PCBvIDw8ICcgJzsKCXN0ZDo6Y291dCA8PCAiIC0+ICAiOwoJZm9yIChhdXRvJiBvIDogUilzdGQ6OmNvdXQgPDwgbyA8PCAnICc7CglzdGQ6OmNvdXQgPDwgc3RkOjplbmRsOwoJcmV0dXJuIHRydWU7Cn0KCgpEVHlwZSBNYWtlSG9nZShjb25zdCBEVHlwZSYgQSxjb25zdCBzdGQ6OnVpbnQ2NF90JiBCLGNvbnN0IHN0ZDo6dWludDY0X3QmIEMsY29uc3Qgc3RkOjp1aW50NjRfdCYgRCkgewoJaWYgKEEuc2l6ZSgpID09IDApcmV0dXJuIEE7CglEVHlwZSBUID0gQTsKCXN0ZDo6cm90YXRlKFQuYmVnaW4oKSwgVC5iZWdpbigpICsgQiwgVC5lbmQoKSk7CglEVHlwZSBWeyBULmJlZ2luKCksVC5iZWdpbigpKyhDKSB9OwkKCWlmIChDID09IDApcmV0dXJuIEE7CglULmVyYXNlKFQuYmVnaW4oKSwgVC5iZWdpbigpKyhDKSk7CQoJVC5pbnNlcnQoVC5iZWdpbigpICsgKEQlVC5zaXplKCkpLCBWLmJlZ2luKCksIFYuZW5kKCkpOwoJc3RkOjpyb3RhdGUoVC5iZWdpbigpLCBULmJlZ2luKCkgKyhULnNpemUoKS0gQiksIFQuZW5kKCkpOwoJcmV0dXJuIFQ7Cn0KCmludCBtYWluKCkKewoJRFR5cGUgQXsgMCwxLDIsMyw0LDUsNiw3LDgsOSB9OwoJc3RkOjp1aW50NjRfdCBCLCBDLCBEOwoJRFR5cGUgUjsKCglCID0gMzsKCUMgPSAxOwoJRCA9IDU7CglSID0gTWFrZUhvZ2UoQSwgQiwgQywgRCk7CglTaG93KEEsIEIsIEMsIEQsIFIpOwoKCUIgPSAxOwoJQyA9IDM7CglEID0gMTsKCVIgPSBNYWtlSG9nZShBLCBCLCBDLCBEKTsKCVNob3coQSwgQiwgQywgRCwgUik7CgoJQiA9IDc7CglDID0gMTsKCUQgPSA1OwoJUiA9IE1ha2VIb2dlKEEsIEIsIEMsIEQpOwoJU2hvdyhBLCBCLCBDLCBELCBSKTsKCglCID0gMDsKCUMgPSA4OwoJRCA9IDE7CglSID0gTWFrZUhvZ2UoQSwgQiwgQywgRCk7CglTaG93KEEsIEIsIEMsIEQsIFIpOwoKCUIgPSA0OwoJQyA9IDU7CglEID0gNDsKCVIgPSBNYWtlSG9nZShBLCBCLCBDLCBEKTsKCVNob3coQSwgQiwgQywgRCwgUik7CgoJQiA9IDk7CglDID0gNTsKCUQgPSA0OwoJUiA9IE1ha2VIb2dlKEEsIEIsIEMsIEQpOwoJU2hvdyhBLCBCLCBDLCBELCBSKTsKCglCID0gNzsKCUMgPSAzOwoJRCA9IDE7CglSID0gTWFrZUhvZ2UoQSwgQiwgQywgRCk7CglTaG93KEEsIEIsIEMsIEQsIFIpOwoKCXN0ZDo6Y291dCA8PCBzdGQ6OmVuZGw7CgoJZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IDEwOyBpKyspIHsKCQlBID0gRFR5cGV7IDAsMSwyLDMsNCw1LDYsNyw4LDkgfTsKCQlCID0gR2V0UmFuZG9tPHN0ZDo6dWludDY0X3Q+KDAsIDkpOwoJCUMgPSBHZXRSYW5kb208c3RkOjp1aW50NjRfdD4oMCwgOSk7CgkJRCA9IEdldFJhbmRvbTxzdGQ6OnVpbnQ2NF90PigwLCA5KTsKCQlSID0gTWFrZUhvZ2UoQSwgQiwgQywgRCk7CgkJU2hvdyhBLCBCLCBDLCBELCBSKTsKCX0KCWZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCAxMDsgaSsrKSB7CgkJQSA9IE1ha2VBcnJheShpKTsKCQlCID0gR2V0UmFuZG9tPHN0ZDo6dWludDY0X3Q+KDAsIDkpOwoJCUMgPSBHZXRSYW5kb208c3RkOjp1aW50NjRfdD4oMCwgOSk7CgkJRCA9IEdldFJhbmRvbTxzdGQ6OnVpbnQ2NF90PigwLCA5KTsKCQlSID0gTWFrZUhvZ2UoQSwgQiwgQywgRCk7CgkJU2hvdyhBLCBCLCBDLCBELCBSKTsKCX0KCXJldHVybiAwOwp9