听取TLE声一片
查看原帖
听取TLE声一片
711892
0809zhangyv楼主2023/2/2 08:19

求大佬指出问题

不懂

不知道

#include<cstring>
#include<cstdlib>
#include<cstdio>
#include<cctype>
#include<ctime>
#define maxn 50
#define max_len 10
using namespace std;
int mod;
int x[max_len], p[maxn+], q[maxn+];
char a[maxn+], b[maxn+];
 
int power(int i, int j) {
    int ans = ;
    while(j > ) {
        if(j & ) ans = (ans * i) % mod;
        i = (i * i) % mod, j >>= ;
    }
    return ans;
}
void work() {
    switch(p[p[]]) {
        case :
            q[q[]-] += q[q[]];
            q[q[]-] %= mod;
            break;
        case :
            q[q[]-] -= q[q[]];
            q[q[]-] %= mod;
            break;
        case :
            q[q[]-] *= q[q[]];
            q[q[]-] %= mod;
            break;
        case :
            q[q[]-] = power(q[q[]-], q[q[]]);
            break;
        case : p[]--; return;
        case : p[]--; return;
    }
    p[]--, q[]--;
}
int get(char s[], int x) {
    int i, j, k, len = strlen(s);
    p[] = , q[] = , q[] = ;
    for(i = ; i < len; i++) {
        if(s[i] == ' ') continue;
        if(s[i] == 'a') {
            q[++q[]] = x;
            continue;
        }
        if(isdigit(s[i])) {
            q[++q[]] = s[i]-'';
            while(isdigit(s[i+]))
                q[q[]] = (q[q[]]* + s[++i]-'') % mod;
            continue;
        }
        switch(s[i]) {
            case '(': p[++p[]] = ; break;
            case '+':
                while(p[]> && p[p[]]> && p[p[]]<) work();
                p[++p[]] = ; break;
            case '-':
                while(p[]> && p[p[]]> && p[p[]]<) work();
                p[++p[]] = ; break;
            case '*':
                while(p[]> && p[p[]]> && p[p[]]<) work();
                p[++p[]] = ; break;
            case '^':
                while(p[]> && p[p[]]> && p[p[]]<) work();
                p[++p[]] = ; break;
            case ')':
                while(p[]> && p[p[]]<) work();
                if(p[p[]] == ) p[]--; break;
        }
    }
    while(p[]) work();
    if(q[] == ) return (q[] + mod) % mod;
    return (q[] + mod) % mod;
}
 
int main() {
    srand(time());
    mod = rand() %  + ;
    int i, j, k, n;
    gets(a);
    for(i = ; i < max_len; i++)
        x[i] = get(a, i);
    scanf("%d\n", &n);
    for(i = ; i < n; i++) {
        gets(b);
        for(j = ; j < max_len; j++)
            if(get(b, j) != x[j]) break;
        if(j >= max_len) printf("%c", 'A'+i);
    }
    return ;
}
2023/2/2 08:19
加载中...