服了第三题就没有拿过满分
下面代码又是70分不知道哪错了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int tonumber(char s[], int l, int r) {
int sum = 0;
for (int i = 0; i < r - l; ++i) {
sum += pow(10, i) * (s[r - i - 1] - '0');
}
if (sum == 0) return 1;
return sum;
}
void dfs(int number, char s[], int start, int end, int hash[]) {
if (start > end) {
return ;
}
int l = start, r = start;
if (s[r] >= 'A' && s[r] <= 'Z') {
char a = s[r];
char b = 'a';
++r;
int x = 0;
if (s[r] >= 'a' && s[r] <= 'z') {
b = s[r];
x = 1;
++r;
}
l = r;
while (s[r] >= '0' && s[r] <= '9') {
++r;
}
int number1 = tonumber(s, l, r);
int loc;
if (x == 0) {
loc = (a - 'A' + 1) * 207;
} else {
loc = (a - 'A') * 207 + b - 'a';
}
hash[loc] += number * number1;
dfs(number, s, r, end, hash);
} else if (s[r] == '(') {
int sign = -1;
while (s[r] != ')' || sign != 0) {
if (s[r] == '(') {
++sign;
}
if (s[r] == ')') {
--sign;
}
++r;
}
int sign1 = r;
++r;
l = r;
while (s[r] >= '0' && s[r] <= '9') {
++r;
}
int number1 = tonumber(s, l, r);
dfs(number1 * number, s, start + 1, sign1 - 1, hash);
dfs(number, s, r, end, hash);
}
}
void togetoutnumber(char s[], int start, int end, int hash[]) {
int l = start, r = start;
while (s[r] < '9' && s[r] >= '0') {
++r;
}
int number = tonumber(s, l, r);
dfs(number, s, r, end, hash);
}
bool ifequal(char s[], int hash1[], int hash2[]) {
int n = strlen(s);
int start = 0;
int sign = 0;
for (int end = 0; end <= n; ++end) {
if (s[end] == '+' || s[end] == '=' || s[end] == '\0') {
if (sign == 0) {
togetoutnumber(s, start, end - 1, hash1);
} else {
togetoutnumber(s, start, end - 1, hash2);
}
if (s[end] == '=') {
sign = 1;
}
end++;
start = end;
}
}
for (int i = 0; i < 50005; ++i) {
if (hash1[i] != hash2[i]) {
return false;
}
}
return true;
}
int main() {
int hash1[50005] = {0};
int hash2[50005] = {0};
int n;
scanf("%d", &n);
getchar();
bool ans[n];
char string[2005];
for (int i = 0; i < n; ++i) {
gets(string);
ans[i] = ifequal(string, hash1, hash2);
memset(hash1, 0, sizeof(hash1));
memset(hash2, 0,sizeof(hash2));
}
for (int i = 0; i < n; ++i) {
if (ans[i]) {
printf("Y\n");
} else {
printf("N\n");
}
}
return 0;
}