📄 pku1686.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 + -