求助,打的暴力,TLE可以理解为社么会WA

P7077 [CSP-S2020] 函数调用

Stevehim @ 2022-10-27 12:44:55

RT

#include <bits/stdc++.h>
#define maxn 100010
using namespace std;
int n, m;
int Q;
vector<int> G[maxn];
int in[maxn]; //存储入度
int a[maxn]; //初始数列
int func[maxn]; //存储每个函数的类刑(下标表示函数序号)
int func1[maxn][2]; //记录第一类函数存储的下标及加数
int func2[maxn]; //记录第二类函数的乘数
int f3_s[maxn];//每个第三类函数连接的函数个数
int f3_n[maxn]; //记录第三类函数的序号
vector<int> func3[maxn]; //存储每个第三类函数的连接函数
int func3_number; //记录个数
int b[maxn];

void _print() {
    for (int i = 0; i < n; i++) {
        cout << a[i] << ' ';
    }
    cout << endl;
}

void one(int i, int x) {
//  cout << a[i] << endl;
    a[i - 1] += x;
}

void two(int x) {
    for (int i = 0; i < n; i++) {
        a[i] *= x;
    }
//  _print();
}

void three(int x) { //x表示序号
    for (int i = 0; i < f3_s[x]; i++) {
        switch (func[func3[x][i]]) { //取出函数类型
            case 1: {
                one(func1[func3[x][i]][0], func1[func3[x][i]][1]);
                break;
            }
            case 2: {
                two(func2[func3[x][i]]);
                break;
            }
            case 3: {
                three(func3[x][i]);
                break;
            }
        }
    }
}

int main() {
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    cin >> m;
    for (int i = 1; i <= m; i++) {
        cin >> func[i];
        switch (func[i]) {
            case 1: {
                cin >> func1[i][0] >> func1[i][1];
                break;
            }
            case 2: {
                cin >> func2[i];
//              cout << i << ' ' << func[i] << ' ' << func2[i] << endl;
                break;
            }
            case 3: {
                cin >> f3_s[i];
                int t;
                for (int j = 0; j < f3_s[i]; j++) {
                    cin >> t;
                    func3[i].push_back(t);
                }
//              func3_number++;
                break;
            }
        }
    }
    cin >> Q;
    int number;
    for (int i = 0; i < Q; i++) {
        cin >> b[i];
    }
    for (int i = 0; i < Q; i++) {
        number = b[i];
//      cout << number << ' ' << func[number];
        switch (func[number]) {
            case 1: {
//              cout << func1[number][0] << ' ' << func1[number][1] << endl;
                one(func1[number][0], func1[number][1]);
                break;
            }
            case 2: {
//              cout << func2[number];
                two(func2[number]);
                break;
            }
            case 3: {
                three(number);
                break;
            }
        }
    }
    _print();
    return 0;
}

by Carey_chen @ 2023-08-23 14:47:08

@Stevehim 好像没开 long long? 我的暴力就是因为long long WA掉的。


by Carey_chen @ 2023-08-23 14:53:33

还要取模,然后就过了


|