为什么我的交互式问题在字符串查询时失败,但在直接整数输入时有效?

问题描述 投票:0回答:1

问题链接 = 链接 我正在解决一个交互式问题,并且遇到一个问题,当我使用直接整数输入/输出进行查询时,我的解决方案可以完美运行。但是,当我尝试使用字符串连接(例如,“?”+ to_string(x)+“”+ to_string(y))格式化查询时,解决方案失败。

在这两种情况下,我确保在每次查询后使用flush()刷新输出。然而,第一种方法并没有达到预期的效果。字符串连接或输出格式是否会导致交互环境中的计时问题或不匹配的期望?如何确保我的解决方案始终如一地工作?

int query(string s) {
    FastIO::println(s);
    FastIO::flush();
    return FastIO::nextInt();
}

void solve() {
    int n = FastIO::nextInt();
    vector<pair<int, int>> list;
    for (int x = 2; x <= n; x++) {
        int y = 1, pre = -1;
        while (pre != y) {
            pre = y;
            y = query("? " + to_string(x) + " " + to_string(y));
        }
        list.push_back({x, pre});
    }

    FastIO::print("! ");
    for (auto &e : list) {
        FastIO::print(to_string(e.first) + " " + to_string(e.second) + " ");
    }
    FastIO::println("");
    FastIO::flush();
}

int main() {
    int t = FastIO::nextInt();
    while (t--) {
        solve();
    }
    return 0;
}

此代码不起作用,但下一个代码起作用了


int query(int x, int y) {
    FastIO::println("? " + to_string(x) + " " + to_string(y));
    FastIO::flush();
    return FastIO::nextInt();
}

void solve() {
    int n = FastIO::nextInt();
    vector<pair<int, int>> list;
    for (int x = 2; x <= n; x++) {
        int y = 1, pre = -1;
        while (pre != y) {
            pre = y;
            y = query(y, x);
        }
        list.push_back({x, pre});
    }

    FastIO::print("! ");
    for (auto &e : list) {
        FastIO::print(to_string(e.first) + " " + to_string(e.second) + " ");
    }
    FastIO::println("");
    FastIO::flush();
}

int main() {
    int t = FastIO::nextInt();
    while (t--) {
        solve();
    }
    return 0;
}

我期待这两个代码都能给出正确的答案。 两个代码的 java 代码也给出了相同的结果。

c++ string function c++17
1个回答
0
投票

我能发现的唯一区别是你在第二个版本中交换了

x
y

这意味着如果您进行相同的交换,您也应该在第一个版本中获得正确的结果。

所以,而不是:

y = query("? " + to_string(x) + " " + to_string(y));

做到:

y = query("? " + to_string(y) + " " + to_string(x));
© www.soinside.com 2019 - 2024. All rights reserved.