提交全WA求调
查看原帖
提交全WA求调
790962
Thefishbone楼主2023/11/17 14:40

自测能过但是全部显示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 );
	}
}
2023/11/17 14:40
加载中...