# 13692 - Aftermath's Ideology >author: Utin ###### tags: `string` --- ## Brief 需建表並加入參數q以免TLE String Operation目前已知共有4種變化 13572 String Operations 1 13573 String Operations 2 13692 Aftermath’s Ideology 13805 Professor Bear’s Challenge ## Solution 0 ```c= #include <stdio.h> #include <string.h> int q; char arr[1000001]; // input char table[100001][26]; // alphabet table int op[100001][3]; // operation queue int main() { scanf("%s", arr); scanf("%d", &q); int len = strlen(arr); for (int j = 0; j < 26; j++) table[q][j] = 'a' + j; // input for (int i = 0; i < q; i++) { scanf("%d", &op[i][0]); if (op[i][0] == 1) { char temp1, temp2; scanf(" %c %c", &temp1, &temp2); op[i][1] = temp1; op[i][2] = temp2; } else if (op[i][0] == 2) { char temp; scanf("%d %c", &op[i][1], &temp); op[i][2] = temp; } else scanf("%d %d", &op[i][1], &op[i][2]); } for (int i = q-1; i >= 0; i--) { // update for (int j = 0; j < 26; j++) { table[i][j] = table[i+1][j]; } // operation type 1 if (op[i][0] == 1) { table[i][op[i][1]-'a'] = table[i+1][op[i][2]-'a']; } } for (int i = 0; i < q; i++) { // operation type 2 if (op[i][0] == 2) { arr[op[i][1]] = table[i][op[i][2]-'a'] - 32; } // operation type 3 else if (op[i][0] == 3) { char temp = arr[op[i][1]]; arr[op[i][1]] = arr[op[i][2]]; arr[op[i][2]] = temp; } } // output for (int i = 0; i < len; i++) { if (arr[i] >= 'a') printf("%c", table[0][arr[i]-'a']); else printf("%c", arr[i] + 32); } printf("\n"); } // By Utin ``` ## Reference