求助
  • 板块学术版
  • 楼主XNULL666
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/10/24 13:46
  • 上次更新2023/10/27 06:10:04
查看原帖
求助
550324
XNULL666楼主2022/10/24 13:46

https://www.luogu.com.cn/problem/T281294

有人帮忙解答一下吗?

我的代码已经写到这了:

#include<bits/stdc++.h>
using namespace std;
const int N=100005,base=131,mod=1000069;
int n,num,ans,col;
int fir[1000100],nxt[1000100],to[1000100],p[1000100],vis[N];
int s[N][20],t[N][20];
bool cmp(int u,int v){
    if(strlen(s[u])!=strlen(t[v]))return 0;
    for(int i=0;s[u][i];i++){
        if(s[u][i]!=t[v][i]){
            return 0;
        }
    }
    return 1;
}
void HASH(char p[],int k){
    int key=0;
    for(int i=0;p[i];i++){
        key=(key*base%mod+p[i])%mod;
        num++;
        to[num]=k;
        nxt[num]=first[u];
    }
}
int find(int u,int x){
    for(int i=fir[u];i;i=nxt[i]){
        if(cmp(to,x)){
            return to[i];
        }
    }
    return 0;
}
void dfs(int step){
    if(!p[step])return;
    if(vis[p[step]]==vis[step]){
        ans++;
        return ;
    }
    if(!vis[p[step]])return ;
    vis[p[step]]=vis[step];
    dfs(p[step]);
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%s%s",s[i],t[i]);
        HASH(s[i],i);
    }
    /*下面不会了。。。*/
    return 0;
}

这里是思路: 给文件名“编号”可以采用哈希。 在当前哈希表中查找当前文件名,找到则直接返回编号,否则将当前文件名加入哈希表,++num,当前文件名编号记为num。 由于文件名不超过200000,每个长度都不超过10,因此可以采用“单哈希+比对”的方式实现文件名的查找。时间和空间都完全可以承受

//完整思路可以找我要

//luogu私信 : xmc6666

2022/10/24 13:46
加载中...