TopCoder

ianwen
$\huge 菜\ 就多練$

User's AC Ratio

100.0% (3/3)

Submission's AC Ratio

45.5% (5/11)

Tags

Description

本題為互動題 僅可使用C++ 14/17/20作答

drawing

給你一個 $2\times2$ 的魔術方塊,你可以幫我解開嗎?

image
上圖為一個 $2\times2$ 的魔術方塊展開圖。每個面都是由 $2\times2$ 個格子所組成。上述圖片當中的魔方已經被解開,我們可以以下列文字表式期六個面的顏色與分佈。(W: White, Y: Yellow, G: green, B: blue, O: Orange, R: Red, -則表示沒格子的空地)
--WW----
--WW----
OOGGRRBB
OOGGRRBB
--YY----
--YY----

而給你打亂的魔術方塊則如下所示:
image

--WR----
--WG----
GGRYRBWO
OOGYRBWB
--YB----
--YO----

現在,定義三種旋轉公式符號
image
若為反方向旋轉,在一班公式裡,會記為如U'的形式。但在本題中,為了輸出方便,請以小寫字母代替。

已知,利用上述三種旋轉方式,便可以將一顆魔術方塊解開。
現在,給你一顆隨機打亂的魔術方塊,你可以用程式將它解開嗎?

魔術方塊教學:
https://1hrbld.tw/intermediate-selection-panel/222-basicmethod-toturial/
https://ruwix.com/online-puzzle-simulators/2x2x2-pocket-cube-simulator.php

Input Format

本題為互動題,請不要輸入/輸出任何資料,以免發生

請在你程式當中,加上一行:
#include "lib4555.h"

在此標頭檔當中,你可以使用一個class及以下二個函數。


class PocketCube {
        friend std::ostream& operator<<(std::ostream& os, const PocketCube& p);
        public:
        PocketCube();
        PocketCube& Rotate(char dir);
        //上面的函數會幫你旋轉魔方 旋轉方式如下rotate函數所述
        bool check();
        //這個函數會回傳這個魔方目前是不是對的的布林值
        char color[25];
        //儲存格子顏色的 代碼編號如下述
};
--0 1----
--2 3----
4 5 6 7 8 9 10 11
12 13 14 15 16 17 18 19
--20 21----
--22 23----

PocketCube initialize();

請在你的主程式的最一開始呼叫這個函數。
他會給你一個PocketCube物件
你可以任意呼叫大寫開頭的Rotate函數,其意義為對這個PocketCube物件的color陣列進行操作,不記入旋轉次數也不會影響你的解


void rotate(char dir);

本函數非class中所包含的函數,呼叫他便代表對judge中的魔方進行旋轉且無法復原,請小心呼叫
dir 須為 F R U f r u其中之一,旋轉方向如題目所述


void report();

本函數只能呼叫一次,代表你覺得你的魔方轉對了。

Output Format

void report();

請呼叫此函數一次,代表你覺得你的魔方轉對了。

Hints

這裡有一個可以編譯過但不保證AC的程式


#include<iostream>
#include"lib4555.h"
using namespace std;

int main(){
    PocketCube ans;
    ans=initialize();
    rotate('U');
    ans.Rotate('U');
    if(ans.check())report();
}

Problem Source

Subtasks

No. Testdata Range Constraints Score
1 0~9 all 1

Testdata and Limits

No. Time Limit (ms) Memory Limit (VSS, KiB) Output Limit (KiB) Subtasks
0 10000 65536 65536 1
1 10000 65536 65536 1
2 10000 65536 65536 1
3 10000 65536 65536 1
4 10000 65536 65536 1
5 10000 65536 65536 1
6 10000 65536 65536 1
7 10000 65536 65536 1
8 10000 65536 65536 1
9 10000 65536 65536 1