关于把getline换成cin就AC了的玄学问题
  • 板块P2814 家谱
  • 楼主ghy114514
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/5/31 21:24
  • 上次更新2023/10/28 00:11:34
查看原帖
关于把getline换成cin就AC了的玄学问题
670477
ghy114514楼主2022/5/31 21:24

以下两份代码除了输入不同没有其他差别,但一个AC,一个WA。

AC的:

#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的:

#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

2022/5/31 21:24
加载中...