自测能过但是全部显示too short on the line 1
#include <iostream>
#include <cctype>
#include <vector>
using namespace std;
typedef __int128 i8;
typedef vector<i8> Alg;
Alg add(Alg a, Alg b) {
Alg ret;
if(a.size() == 0 || b.size() == 0) return ret;
ret.resize(max(a.size(), b.size()));
int sz_a = a.size(), sz_b = b.size();
for(int i(0); i < sz_a; ++i)
ret[i] += a[i];
for(int i(0); i < sz_b; ++i)
ret[i] += b[i];
return ret;
}
Alg sub(Alg a, Alg b) {
Alg ret;
if(a.size() == 0 || b.size() == 0) return ret;
ret.resize(max(a.size(), b.size()));
int sz_a = a.size(), sz_b = b.size();
for(int i(0); i < sz_a; ++i)
ret[i] += a[i];
for(int i(0); i < sz_b; ++i)
ret[i] -= b[i];
return ret;
}
Alg mul(Alg a, Alg b) {
Alg ret;
if(a.size() == 0 || b.size() == 0) return ret;
ret.resize(a.size() + b.size() - 1);
int sz_a = a.size(), sz_b = b.size();
for(int i(0); i < sz_a; ++i)
for(int j(0); j < sz_b; ++j)
ret[i + j] += a[i] * b[j];
return ret;
}
Alg po(Alg a, Alg p) {
i8 po = p[0];
Alg tot = { 1 };
while(po) {
if(po & 1) tot = mul(tot, a);
a = mul(a, a);
po >>= 1;
}
return tot;
}
char guard = getchar();
void eatSpace() { while(guard == ' ') guard = getchar(); }
Alg _g_num();
Alg _g_alpha();
Alg _g_brak();
Alg _g_lev0();
Alg _g_lev1();
Alg _g_lev2();
Alg _g_lev3();
Alg _g_num() {
eatSpace();
i8 tot = 0;
while(isdigit(guard)) {
tot = tot * 10 + guard - '0';
guard = getchar();
}
return { tot };
}
Alg _g_alpha() {
eatSpace();
guard = getchar();
return { 0, 1 };
}
Alg _g_brak() {
eatSpace();
guard = getchar();
Alg ret = _g_lev3();
eatSpace();
guard = getchar();
return ret;
}
Alg _g_lev0() {
eatSpace();
if(isdigit(guard)) return _g_num();
if(isalpha(guard)) return _g_alpha();
if(guard == '(') return _g_brak();
return Alg();
}
Alg _g_lev1() {
Alg L = _g_lev0();
eatSpace();
while(guard == '^') {
guard = getchar();
L = po(L, _g_lev0());
eatSpace();
} return L;
}
Alg _g_lev2() {
Alg L = _g_lev1();
eatSpace();
while(guard == '*') {
guard = getchar();
L = mul(L, _g_lev1());
eatSpace();
} return L;
}
Alg _g_lev3() {
Alg L = _g_lev2();
eatSpace();
while(guard == '+' || guard == '-') {
char op = guard;
guard = getchar();
L = op == '+' ? add(L, _g_lev2()) : sub(L, _g_lev2());
eatSpace();
} return L;
}
Alg readAlg() {
Alg ret = _g_lev3();
guard = getchar();
return ret;
}
void print(Alg a) {
int sz = a.size();
for(int i = 0; i < sz; ++i) {
printf(" + %d * a ^ %d", (int)a[i], (int)i);
}
putchar('\n');
}
int main() {
/**/
Alg ques = readAlg();
while(ques.size() && ques.back() == 0) ques.pop_back();
//print(ques);
i8 q = _g_num()[0]; guard = getchar();
for(int i = 0; i < q; ++i) {
Alg cur = readAlg();
while(cur.size() && cur.back() == 0) cur.pop_back();
//print(cur);
if(cur == ques) putchar( 'A' + i );
}
}