Why TLE?
  • 板块灌水区
  • 楼主Wrong_Accept
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/9/27 21:24
  • 上次更新2024/9/27 21:46:18
查看原帖
Why TLE?
977599
Wrong_Accept楼主2024/9/27 21:24

这段代码会 TLE,但是把第 44 行 get() 里的的 while (n && order == "CHANGE") 改成 while (n) 就不会了。
各位大佬,为什么啊?

#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;
}
2024/9/27 21:24
加载中...