# 圈圈...畫圈圈...畫圈圈就不會緊張了... https://neoj.sprout.tw/problem/462/ ![](https://i.imgur.com/P7QMvMx.jpg) >一里波知 (@ひとりぼっちの○○生活,中譯一個人的○○小日子/孤獨地躲在牆角畫圈圈) # 一里波知是個喜歡躲在角落畫圈圈的人。對於什麼東西都可以畫圈圈! 有天她突然想到,如果對一個字串畫圈圈會怎麼樣呢? ![](https://i.imgur.com/27n1Yaq.jpg) >一里波知正躲在學校後面畫圈圈。 畫一畫發現,這些字串都會有一些神奇的規律! + 畫右邊一圈:整個字串會往右轉一個字。例如`abcd`就會變成`dabc`。 + 畫左邊一圈:整個字串會往左轉一個字。例如`abcd`就會變成`bcda`。 + 畫上面一圈:整個字串的字會上轉1,超過會補回前面。例如`abcxyz`會變成`bcdyza`。 + 畫下面一圈:整個字串的字會下轉1,超過會補回後面。例如`abcxyz`會變成`zabwxy`。 現在給你一里波知正在畫的一個字串及一連串的指令,請輸出每個指令結束後的字串長什麼樣子。 ### 輸入格式 第一行一個字串$S$,表示一里波知正在畫的一個字串。 第二行有一個整數$N$,表示一里波知接下來有$N$筆操作。 接下來$N$行有可能是以下形式 (以下用[]框起來的表示它是變數): + `right [a]` : a是整數,將字串右轉a個字。 + `left [a]` : a是整數,將字串左轉a個字。 + `up [a]` : a是整數,將整個字串的字上轉a個字。 + `down [a]` : a是整數,將整個字串的字下轉a個字。 ### 輸出格式 輸出執行完各個指令後,字串$S$變怎麼樣。 ### 輸入限制 + 對於 30% 測資: + 支援`up`和`down`,且 $0 < a ≤10$ + 對於 60% 測資: + 支援所有指令,且 $0 < a ≤ 10$ + 對於 95% 測資: + 支援所有指令: + `up`和`down`的$a$限制:$0 < a ≤ 100000$ + `left`和`right`的$a$限制:$0 < a ≤10$ + 對於 100% 測資: + $S$ 只會有小寫英文。 + $0 < |S| ≤ 1000$ + $0 < N ≤ 50$ + $0 ≤ a < 2147483648$ + 支援上述所有指令。 ### 範例輸入 ``` abcxyz 5 up 1 down 1 left 1 right 1 left 6 ``` ### 範例輸出 ``` bcdyza abcxyz bcxyza abcxyz abcxyz ``` # Code ```cpp #include <iostream> using namespace std; int main(){ char in[1100]; int n, x = 0, a, r = 1; cin >> in >> n; for (; in[x] != '\0'; ) x++; while (r++ <= n) { char kind[10]; cin >> kind; char out[1100]; if (kind[0] == 'r') { cin >> a; a = a % x; if (a != 0) { for (int t = 1; t <= a; t++) { for (int k = 0; k < x - 1; k++) { out[0] = in[x-1]; out[k+1] = in[k]; } for(int i = 0; i < x; i++) { if (in[i] == '\0') break; in[i] = out[i]; } } } else { for(int i = 0; i < x; i++) { if (in[i] == '\0') break; out[i] = in[i]; } } out[x] = '\0'; cout << out << "\n"; } if (kind[0] == 'l') { cin >> a; a = a % x; if (a != 0) { for (int t = 1; t <= a; t++) { for (int k = 0; k < x; k++) { out[k]=in[k+1]; out[x-1]=in[0]; } for (int i = 0; i < x; i++) { if (in[i] == '\0') break; in[i] = out[i]; } } } else { for(int i = 0; i < x; i++) { if (in[i] == '\0') break; out[i] = in[i]; } } out[x] = '\0'; cout << out << "\n"; } if (kind[0] == 'u') { cin >> a; a = a % 26; if (a != 0) { for (int t = 1; t <= a; t++) { for (int k = 0; k < x; k++) { if (in[k] == 'z') out[k] = 'a'; else out[k] = in[k] + 1; } for (int i = 0; i < x; i++) { if (in[i] == '\0') break; in[i] = out[i]; } } } else { for(int i = 0; i < x; i++) { if (in[i]=='\0') break; out[i] = in[i]; } } out[x] = '\0'; cout << out << "\n"; } if (kind[0] == 'd') { cin >> a; a = a % 26; if (a != 0) { for (int t = 1; t <= a; t++) { for (int k = 0; k < x; k++) { if (in[k] != 'a') out[k] = in[k] - 1; else out[k] = 'z'; } for (int i = 0; i < x; i++) { if (in[i]=='\0') break; in[i] = out[i]; } } } else { for(int i = 0; i < x; i++) { if (in[i] == '\0') break; out[i] = in[i]; } } out[x] = '\0'; cout << out << "\n"; } } } ```