#1 WA, 求Debug或者能够复现问题的数据
查看原帖
#1 WA, 求Debug或者能够复现问题的数据
109944
Allenyou1126楼主2023/9/10 13:17

如题,其余9个测试点均已经AC,但是在#1出现了Too short on line 1.的问题,代码如下:

#include <cstdio>
#include <iostream>
#include <vector>

using namespace std;
inline int rd() {
    int ret = 0, flag = 1;
    char c = getchar();
    for (; c > '9' || c < '0'; c = getchar()) {
        if (c == 'n')
            return 0;
    }
    for (; c >= '0' && c <= '9'; c = getchar())
        ret = ret * 10 + (c - '0');
    return ret * flag;
}
struct statement {
    vector<int> coefficients;
    int lazy_mul_num = 1;
    void lazy() {
        for (vector<int>::iterator it = coefficients.begin(); it != coefficients.end(); ++it) {
            *(it.base()) *= lazy_mul_num;
        }
        lazy_mul_num = 1;
    }
    void mul(int n) { lazy_mul_num *= n; }
    void muln() {
        this->lazy();
        coefficients.insert(coefficients.begin(), 0);
    }
    void add(int n) {
        this->lazy();
        if (coefficients.size() == 0) {
            coefficients.push_back(n);
        } else {
            coefficients[0] += n;
        }
    }
    void add(statement st) {
        this->lazy();
        int size = min(coefficients.size(), st.coefficients.size());
        for (int i = 0; i < size; ++i) {
            coefficients[i] += st.coefficients[i];
        }
        if (coefficients.size() < st.coefficients.size()) {
            int sz = st.coefficients.size();
            for (int i = size; i < sz; ++i) {
                coefficients.push_back(st.coefficients[i]);
            }
        }
    }
    void addn() {
        this->lazy();
        if (coefficients.size() == 0) {
            coefficients.push_back(0);
            coefficients.push_back(1);
        } else if (coefficients.size() == 1) {
            coefficients.push_back(1);
        } else {
            coefficients[1]++;
        }
    }
    void print() {
        this->lazy();
        int size = coefficients.size();
        bool flag = false, pr = false;
        for (int i = size - 1; i >= 0; --i) {
            if (coefficients[i] == 0) {
                continue;
            }
            if (flag) {
                printf("+");
            }
            if (coefficients[i] != 1) {
                printf("%d", coefficients[i]);
            }
            if (i == 0) {
                goto ac;
            }
            printf("n");
            if (i != 1) {
                printf("^%d", i);
            }
        ac:
            pr = true;
            if (!flag) {
                flag = true;
                continue;
            }
        }
        if (!pr) {
            printf("0");
        }
        printf("\n");
    }
};
statement block(int n, bool inLoop = true) {
    statement ret;
    bool brk = false;
    while (true) {
        string cmd;
        cin >> cmd;
        if (cmd == "begin") {
            continue;
        }
        if (cmd == "end") {
            break;
        } else if (cmd == "loop") {
            int arg = rd();
            statement tmp = block(arg);
            if (!brk) {
                ret.add(tmp);
            }
        } else if (cmd == "op" && !brk) {
            int arg = rd();
            if (arg) {
                ret.add(arg);
            } else {
                ret.addn();
            }
        } else if (cmd == "break" && inLoop && !brk) {
            n = 1;
            brk = true;
        } else if (cmd == "continue" && inLoop && !brk) {
            brk = true;
        }
    }
    if (n) {
        ret.mul(n);
    } else {
        ret.muln();
    }
    ret.lazy();
    return ret;
}
int main() {
    block(1, false).print();
    return 0;
}
2023/9/10 13:17
加载中...