● Bayan programming contest Qualification Round - C. Extraterrestrial Rotations
چرخشهای خارقالعاده
سیارهی دوردست ویژگیهای خارقالعادهای دارد. کاوشهای دانشمندان فضایی نشان می دهد که سیارهی دوردست، برخلاف سایر سیّارهها به شکل مکعب است و بر روی هر وجهِ این سیارهی مکعبی، نامی نوشته شده است. همچنین این سیاره به جای چرخش به دور یک محور، حول سه محور میچرخد...
2 Front Up Down Left Right Back 2 Z 4 X 4 Front Up Down Left Right Back 3 Z 1 X 1 Y 1
Front Up Down Left Right Back Down Back Front Right Left Up
انواع چرخشهای سیاره به شرح زیر است:
چرخش نوع X: وجههای راست (Right) و چپ ثابت میمانند و مطابق شکل به سمت بالا میچرخد.
چرخش نوع Y: وجههای جلو (Front) و پشت ثابت میمانند و مطابق شکل به سمت راست میچرخد.
چرخش نوع Z: وجههای بالا (Top) و پایین ثابت میمانند و مطابق شکل به سمت راست میچرخد.
از شما خواسته شده تا برنامهای بنویسید که تعیین کند بعد از تعدادی چرخش، چه کلماتی بر روی وجوهِ جلو، بالا، پایین، چپ، راست و پشت نوشته شده است.
ورودی:
در سطر اول ورودی عدد t نشاندهندهی تعداد تستهای ورودی آمده است. برای هر تست، در سطر اول، شش کلمه (هر یک به طول حداکثر 10 کاراکتر و شامل حروف انگلیسی) آمده است. این کلمات با کاراکتر فاصله از هم جدا شدهاند و به ترتیب کلمات نوشته شده بر روی جلو، بالا، پایین، چپ، راست و پشت مکعب در ابتدای کار را نشان میدهند.
در سطر بعدی عدد n تعداد مجموعهی چرخشها آمده است. در هر یک از n سطر بعد، ابتدا نوع حرکت با یکی از حروف X، Y یا Z مشخص شده است و سپس عدد m بیانگر تعداد حرکات از آن نوع آمده است.
1≤t≤100
1≤n≤10000
1≤m≤109
خروجی:
برای هر تست، پس از اعمال حرکات بر روی مکعب، در یک سطر به ترتیب کلمات دیده شده بر روی جلو، بالا، پایین، چپ، راست و پشت مکعب را بنویسید.
// A Drop of the Programming Sea - adops.blog.ir#include <algorithm> #include <iostream> #include <fstream> #include <cstdlib> #include <cstring> #include <iomanip> #include <sstream> #include <conio.h> #include <vector> #include <cstdio> #include <deque> #include <ctime> #include <cmath> #include <stack> #include <set> #include <map> using namespace std; #define c_false ios_base::sync_with_stdio(false) int main() { c_false; int t; cin >> t; while(t--) { string Front, Up, Down, Left, Right, Back; cin >> Front >> Up >> Down >> Left >> Right >> Back; int n; cin >> n; while(n--) { char c; long m; cin >> c >> m; m %= 4; switch(c) { case 'X': { while(m--) { swap(Up, Back); swap(Up, Down); swap(Up, Front); } } break; case 'Y': { while(m--) { swap(Right, Down); swap(Right, Left); swap(Right, Up); } } break; case 'Z': { while(m--) { swap(Right, Back); swap(Right, Left); swap(Right, Front); } } break; } } cout<<Front<<' '<<Up<<' '<<Down<<' '<<Left<<' '<<Right<<' '<<Back<<endl; } }