A
#include <iostream>
using namespace std;
struct Bignum {
int len = 0, num[5005] = {0};
void set(string s) {
len = s.size();
for(int i = 1; i <= len; i++) num[i] = s[len - i] - '0';
}
void set(long long n) {
len = 0;
while(n > 0) {
num[++len] = n % 10;
n /= 10;
}
if(len == 0) len++;
}
void print() {
if(len == 0) cout << 0 << endl;
len += 2000;
while(len > 1 && num[len] == 0) len--;
for(int i = len; i >= 1; i--) cout << num[i];
}
};
Bignum operator+(const Bignum &a, const Bignum &b) {
Bignum c;
c.len = max(a.len, b.len);
for(int i = 1; i <= c.len; i++) {
c.num[i] += a.num[i] + b.num[i];
c.num[i + 1] = c.num[i] / 10;
c.num[i] %= 10;
}
if(c.num[c.len + 1] != 0) c.len++;
return c;
}
Bignum operator*(const Bignum &a, const Bignum &b) {
Bignum c;
c.len = max(a.len, b.len);
for(int i = 1; i <= c.len; i++) {
for(int j = 1; j <= c.len; j++) {
c.num[i + j] += a.num[i] * b.num[j];
if(c.num[i + j] >= 10) {
c.num[i + j + 1] += c.num[i + j] / 10;
c.num[i + j] %= 10;
}
}
}
return c;
}
Bignum operator/(const Bignum &a, const int &b) {
Bignum c;
c.len = a.len;
int x = 0;
for(int i = c.len; i >= 1; i--) {
c.num[i] = (x * 10 + a.num[i]) / b;
x = (x * 10 + a.num[i]) % b;
}
while(c.len > 0 && c.num[c.len] == 0) c.len--;
return c;
}
int main() {
string s;
cin >> s;
Bignum n;
n.set(s);
Bignum one;
one.set(1);
Bignum a = n + one;
Bignum x = n * a;
x.print();
return 0;
}
B
#include <iostream>
#include <stack>
using namespace std;
stack<int> stk;
string str[105];
int main() {
int n;
string y;
cin >> n;
for(int i = 1; i <= n; i++) {
string s, ans = "";
for(int i = 1; i <= 100; i++) str[i] = "";
int p;
cin >> s >> p;
int cnt = 0;
for(int j = 0; j < s.size(); j++) {
if(s[j] == '(') {
j++;
stk.push(s[j] - '0');
cnt++;
}
else if(s[j] == '[' || s[j] == '{') cnt++;
else if(s[j] == ')') {
ans = str[cnt--] + ans;
int k = stk.top();
stk.pop();
for(int a = 1; a <= k; a++) ans = ans + ans;
}
else if(s[j] == ']') {
ans = str[cnt--] + ans;
for(int k = 0; k < ans.size(); k++) {
if(ans[k] >= 'a' && ans[k] <= 'z') ans[k] = ans[k] - 'a' + 'A';
else ans[k] = ans[k] - 'A' + 'a';
}
}
else if(s[j] == '}') {
ans = str[cnt--] + ans;
string x = ans;
for(int k = 0; k < ans.size(); k++) {
x[k] = ans[ans.size() - k - 1];
}
ans = x;
}
else {
str[cnt] = str[cnt] + s[j];
}
}
y = y + ans[p - 1];
}
cout << y << endl;
return 0;
}