玄学错误。蒟蒻3WA 7T,本地能过,但是落谷IDE运行超时,求助!!!
查看原帖
玄学错误。蒟蒻3WA 7T,本地能过,但是落谷IDE运行超时,求助!!!
333580
Zwaire楼主2021/8/27 22:01

RT

评测

#include<bits/stdc++.h>
#define g() getchar()
#define il inline
#define eps 1e-10;
#define LL long long
#define pa pair<int, int>
#define for_1(i, n) for(int i = 1; i <= (n); ++i)
#define for_0(i, n) for(int i = 0; i < (n); ++i)
#define for_xy(i, x, y) for(int i = (x); i <= (y); ++i)
#define for_yx(i, x, y) for(int i = (x); i >= (y); --i)
#define for_edge(i, x) for(int i = head[x]; i; i = nxt[i])
#define int long long
// #define mid ((l + r) >> 1)
using namespace std;
const int N = 1e6 + 10;
const int INF = 0x3f3f3f3f;
const int mod = 1000000007;
const int up = 259;

inline int re()
{
	int x = 0, p = 1;
	char ch = getchar();
	while(ch > '9' || ch < '0') {if(ch == '-') p = -1; ch = getchar();}
	while(ch <= '9' and ch >= '0') {x = (x << 3) + (x << 1) + (ch ^ 48); ch = getchar();}
	return x * p;
}

char S[N], s[N];
int n;

int qpow(int x, int k)//快速幂 
{
	int ans = 1;
	while(k){
		if(k & 1) ans = ans * x;
		x = x * x;
		k >>= 1;
	}
	return ans;
}

int calc(char *a, int l, int r)//中缀表达式求值 
{
	for(int i = r, j = 0; i >= l; --i)
	{
		if(a[i] == '(') j++;
		if(a[i] == ')') j--;
		if(j == 0 and a[i] == '+') return calc(a, l, i - 1) + calc(a, i + 1, r);
		if(j == 0 and a[i] == '-') return calc(a, l, i - 1) - calc(a, i + 1, r);
	}
	for(int i = r, j = 0; i >= l; --i)
	{
		if(a[i] == '(') j++;
		if(a[i] == ')') j--;
		if(j == 0 and a[i] == '*') return calc(a, l, i - 1) * calc(a, i + 1, r);
		if(j == 0 and a[i] == '/') return calc(a, l, i - 1) / calc(a, i + 1, r);
		if(j == 0 and a[i] == '^') return qpow(calc(a, l, i - 1), calc(a, i + 1, r));
	}
	
	int ans = 0;
	if(a[l] == '(' and a[r] == ')') return calc(a, l + 1, r - 1);
	for(int i = l; i <= r; ++i)
		ans = ans * 10 + (a[i] - '0');
	return ans;
}

int get(char *a)//读入字串 
{
	int tot = 0;
	char ch;
	while(scanf("%c",&ch))
	{
		if(ch == '\n') break;
		if(ch == ' ') continue;
		if(ch == 'a')
		{
			a[tot++] = '1';
			a[tot++] = '1';
			a[tot++] = '4';
			a[tot++] = '5';
			a[tot++] = '1';
			continue;
		}
		a[tot] = ch;
		tot++;
	}
	return tot;
}

char p[N];
int cnt;
signed main()
{
	int len1 = get(S);
	int Ans = calc(S, 0, len1-1);
	cout<<Ans<<endl;
	n  = re();
	for(int i = 1; i <= n; ++i)
	{
		int len = get(s);
		int ans = calc(s, 0, len-1);
		if(ans == Ans)//比较,输入答案 
		{
			p[cnt] = 'A' + i - 1;
			cnt++;
		}
	}
	cout<<p;
}

样例在luogu IDE 上也是T,本地能跑,疑惑半天。。

2021/8/27 22:01
加载中...