社区讨论

关于把getline换成cin就AC了的玄学问题

P2814家谱参与者 6已保存回复 5

讨论操作

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

当前回复
5 条
当前快照
1 份
快照标识符
@lo8t9anb
此快照首次捕获于
2023/10/28 00:11
2 年前
此快照最后确认于
2023/10/28 00:11
2 年前
查看原帖
以下两份代码除了输入不同没有其他差别,但一个AC,一个WA。
AC的:
CPP
#include <iostream>
#include <string>
#include <map>

using namespace std;

map <string, string> f;

string find(string name)
{
    return (f[name] == name) ? name : f[name] = find(f[name]);
}

int main()
{
    char c;
    string name, s;

    while (c = getchar())
    {
        if (c == '$')
        {
            break;
        }
        else if (c == '#')
        {
            cin >> name;
            if (find(name) == "")
            {
                f[name] = name;
            }
            else
            {
                f[name] = find(name);
            }
        }
        else if (c == '+')
        {
            cin >> s;
            f[s] = f[name];
        }
        else if (c == '?')
        {
            cin >> s;
            cout << s << " " << find(f[s]) << "\n";
        }
    }
    return 0;
}
WA的:
CPP
#include <iostream>
#include <string>
#include <map>

using namespace std;

map <string, string> f;

string find(string name)
{
    return (f[name] == name) ? name : f[name] = find(f[name]);
}

int main()
{
    char c;
    string name, s;

    while (c = getchar())
    {
        if (c == '$')
        {
            break;
        }
        else if (c == '#')
        {
            getline(cin, name);
            if (find(name) == "")
            {
                f[name] = name;
            }
            else
            {
                f[name] = find(name);
            }
        }
        else if (c == '+')
        {
            getline(cin, s);
            f[s] = f[name];
        }
        else if (c == '?')
        {
            getline(cin, s);
            cout << s << " " << find(f[s]) << "\n";
        }
    }
    return 0;
}
提交记录: https://www.luogu.com.cn/record/76729155 https://www.luogu.com.cn/record/76730251

回复

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

正在加载回复...