⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pku1686.cpp

📁 这是ACM 方面的资料 是PKU的 北京大学的出来的
💻 CPP
字号:
//PKU1686.cpp

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define SIZE 110

char s1[SIZE], s2[SIZE];
int p;
int v[26];

void redo(char s[])
{
	int i, j;
	for (i = 0, j = 0; i < strlen(s); i++)
		if (s[i] != ' ')
			s[j++] = s[i];
	s[j] = 0;
}

int DFS(char s[])
{
	int ans = 0;
	int flag = 1;
	char m;
	while (p < strlen(s))
	{
		m = s[p];
		if (m == 0 || m == ')') return ans;
		if (m == '+') flag = 1;
		if (m == '-') flag = 2;
		if (m == '*') flag = 3;
		if (m == '(')
		{
			p++;
			if (flag == 1) ans += DFS(s);
			else if (flag == 2) ans -= DFS(s);
			else ans *= DFS(s);
		}
		if (isdigit(m))
		{
			if (flag == 1) ans += (m - '0');
			else if (flag == 2) ans -= (m - '0');
			else ans *= (m - '0');
		}
		if (m >= 'a' && m <= 'z')
		{
			if (flag == 1) ans += v[m - 'a'];
			else if (flag == 2) ans -= v[m - 'a'];
			else ans *= v[m - 'a'];
		}
		p++;
	}
	return ans;
}

int solve()
{
	int i, j, ans1, ans2;
	gets(s1);
	gets(s2);
	redo(s1);
	redo(s2);
	
	for (j = 0; j < 100; j++)
	{
		for (i = 0; i < 26; i++) v[i] = rand() % 100;
		p = 0;
		ans1 = DFS(s1);
		p = 0;
		ans2 = DFS(s2);
		if (ans1 != ans2)
			return 0;
	}
	return 1;
}

int main()
{
	int T;
	scanf("%d\n", &T);
	while (T--)
		printf("%s\n", solve() ? "YES" : "NO");
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -