社区讨论

Why TLE?

灌水区参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@m1kra81s
此快照首次捕获于
2024/09/27 21:25
去年
此快照最后确认于
2024/09/27 21:46
去年
查看原帖
这段代码会 TLE,但是把第 44 行 get() 里的的 while (n && order == "CHANGE") 改成 while (n) 就不会了。
各位大佬,为什么啊?
CPP
#include <algorithm>
#include <iostream>

int n, k = 10;
long long number;

long long read(std::string other)
{
    long long ten = 0;

    for (char digit : other)
    {
        if (digit < 'A')
            ten = ten * k + digit - 48;
        else
            ten = ten * k + digit - 55;
    }

    return ten;
}

std::string write(long long ten)
{
    std::string other;

    do
    {
        if (ten % k < 10)
            other.push_back(ten % k + '0');
        else
            other.push_back(ten % k + '7');
    } while (ten /= k);
    std::reverse(other.begin(), other.end());

    return other;
}

long long get(long long spare)
{
    std::string order, right;
    std::cin >> order;
    --n;

    while (n && order == "CHANGE")
    {
        std::cin >> k >> order;
        --n;
    }
    if (order == "CLEAR")
    {
        number = 0;
        return spare;
    }

    std::cin >> right;
    return std::max(spare, read(right));
}

int main()
{
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    std::cin >> n;
    while (n--)
    {
        std::string order;
        std::cin >> order;

        if (order == "ADD")
        {
            long long right = get(0);
            number += right;
        }
        else if (order == "SUB")
        {
            long long right = get(0);
            number -= right;
        }
        else if (order == "MUL")
        {
            long long right = get(0);
            number *= right;
        }
        else if (order == "DIV")
        {
            long long right = get(1);
            number /= right;
        }
        else if (order == "MOD")
        {
            long long right = get(1);
            number %= right;
        }
        else if (order == "NUM")
        {
            std::string in;
            std::cin >> in;
            number = read(in);
        }
        else if (order == "CHANGE")
            std::cin >> k;
        else if (order == "EQUAL")
            std::cout << write(number) << '\n';
    }

    return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...