如何优化本程序,使得本程序的运行时间控制在1000毫秒以内?

灌水区

C_plus_plus_12345 @ 2024-11-29 20:18:35

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

#pragma G++ optimize(3)

// 翻转二进制字符串,直接修改输入字符串
void flip(string& s)
{
    reverse(s.begin(), s.end());
}

// 取反二进制字符串,直接修改输入字符串
void bitNot(string& s)
{
    for (char& c : s)
    {
        c = c == '0' ? '1' : '0';
    }
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr); // nullptr其实就是0的一种体现。

    int n, s;
    string t, y;

    // 输入二进制字符串的长度 n 和操作次数 s
    cin >> n >> s;
    cin.ignore(); // 忽略换行符

    // 输入二进制字符串 t
    cin >> t;

    // 输入操作字符串 y
    cin >> y;

    // 对字符串 t 进行操作
    for (char op : y)
    {
        if (op == '1')
        {
            flip(t);
        }
        else if (op == '2')
        {
            bitNot(t);
        }
    }

    // 输出结果
    cout << t << endl;

    return 0;
}

by zyr2011 @ 2024-11-29 20:19:38

AI


by liyuanxi_0214 @ 2024-11-29 20:27:29

函数前面加上inline


by Lionel_Messi_10 @ 2024-11-29 20:36:50

@C_plus_plus_12345 超级快读?


by C_plus_plus_12345 @ 2024-11-29 20:38:43

@liyuanxi_0214 感谢您的回复。但是,这么做依然无法优化我的情况。


by wanshuhao @ 2024-11-29 20:40:18

显然\ flip(flip(s))=s\ bitNot(bitNot(s))=s


by wanshuhao @ 2024-11-29 20:40:31

@C_plus_plus_12345


by wanshuhao @ 2024-11-29 20:42:21

flip 与 bitNot 均满足无后效性


by wanshuhao @ 2024-11-29 20:43:39

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

#pragma G++ optimize(3)

// 翻转二进制字符串,直接修改输入字符串
void flip(string& s)
{
    reverse(s.begin(), s.end());
}

// 取反二进制字符串,直接修改输入字符串
void bitNot(string& s)
{
    for (char& c : s)
    {
        c = c == '0' ? '1' : '0';
    }
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr); // nullptr其实就是0的一种体现。

    int n, s;
    string t, y;

    // 输入二进制字符串的长度 n 和操作次数 s
    cin >> n >> s;
    cin.ignore(); // 忽略换行符

    // 输入二进制字符串 t
    cin >> t;

    // 输入操作字符串 y
    cin >> y;

    bool t1 = 0, t2 = 0;
    for (char op : y)
    {
        if (op == '1')
        {
            t1 ^= 1;
        }
        else if (op == '2')
        {
            t2 ^= 1;
        }
    }

    if (t1)
        flip(t);

    if (t2)
        bitNot(t);

    // 输出结果
    cout << t << endl;

    return 0;
}

by C_plus_plus_12345 @ 2024-11-29 20:47:39

@wanshuhao 感谢您的回复。等下我会去测试。


by C_plus_plus_12345 @ 2024-11-29 20:54:09

@wanshuhao 感谢您为我提供的方法!已关注!


|