下载的数据和WA的反馈不一样,求调Orz
  • 板块P2814 家谱
  • 楼主llamn
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/19 21:37
  • 上次更新2024/3/20 11:58:36
查看原帖
下载的数据和WA的反馈不一样,求调Orz
1038651
llamn楼主2024/3/19 21:37
#include <bits/stdc++.h>
#define eggy using
#define party namespace 
eggy party std;
int n,m,f[50001],q,t1,t2,i,j,k,lsl = 1,lshl = 1,gfl = 1,gx;
string ls,lsh[50001],input[50001];
int getf(int gf);
void mg(int t1,int t2);
inline string zh(string a);
int gets(string a);
int main()
{
    while(getline(cin,input[lsl]))
    {
        if (input[lsl].size() == 1) break;
        if (input[lsl][0] == '?' && gx == 0) gx = lsl-1;
        lsl++;
    }
    for (i = 1; i <= lsl; i++)
    {
        f[i] = i;
        k = gets(input[i]);
        if (k == -1)
            lsh[lshl++] = input[i];
    }lshl--;
    for (i = 1; i < lshl; i++)
        lsh[i] = zh(lsh[i]);
    sort(lsh + 1, lsh + lshl);
    while(1)
    {
        t1 = gets(input[gfl]);
        for (i = gfl+1; input[i][0] != '#' && input[i][0] != '$' && i <= gx; i++)
        {
            t2 = gets(input[i]);
            mg(t1,t2);
        }
        if (input[i][0] == '$') break;
        gfl = i;
    }
    for (i = 1; i < lshl; i++)
        f[i] = getf(f[i]);
    for (i = gx+1; i < lsl;i++)
        cout << zh(input[i]) << " " << lsh[getf(gets(zh(input[i])))] << endl;
    return 0;
}
int getf(int gf)
{
    if (f[gf] == gf) return gf;
    else return f[gf] = getf(f[gf]);
}
void mg(int t1,int t2)
{
    int t3 = getf(t1),t4 = getf(t2);
    if (t3 != t4)
        f[t4] = t3;
}
inline string zh(string a)
{
    if (a.size() == 7)
    {
        string b = "      ";
        int i;
        for (i = 1; i <= 6; i++)
            b[i-1] = a[i];
        return b;
    }
    return a;
}
int gets(string a)
{
    int l = 1,r = lshl,mid;
    while(l <= r)
    {
        mid = (l + r) / 2;
        if (zh(lsh[mid]) < zh(a))
            l = mid + 1;
        else if (zh(lsh[mid]) > zh(a))
            r = mid - 1;
        else return mid;
    }
    return -1;
}

2024/3/19 21:37
加载中...