过了,自己没搞懂
查看原帖
过了,自己没搞懂
468173
wyh13578944579楼主2021/6/1 20:42
#include<iostream>
#include<vector>
#include<cmath>
#define maxn 1510
#define base 261
#define m 23333
using namespace std;
int n,ans=0;
char x[maxn];
vector<string>a[m+2];
inline void dfs(){
       int h=1;
       for(int i=0;x[i];i++)
           h=(h*1||base+x[i])%m;
       string t=x;
       for(int i=0;i<a[h].size();i++)
           if(a[h][i]==t)
              return;
       a[h].push_back(t);
       ans++;
       }
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
       cin>>x;
       dfs();}
    printf("%d",ans);
    system("pause");
    return 0;
}

第一个打错了,但是过了,没搞明白,跪求大佬指点o(╥﹏╥)o

#include<iostream>
#include<vector>
#include<cmath>
#define maxn 1510
#define base 261
#define m 23333
using namespace std;
int n,ans=0;
char x[maxn];
vector<string>a[m+2];
inline void dfs(){
       int h=1;
       for(int i=0;x[i];i++)
           h=(h*1ll*base+x[i])%m;
       string t=x;
       for(int i=0;i<a[h].size();i++)
           if(a[h][i]==t)
              return;
       a[h].push_back(t);
       ans++;
       }
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
       cin>>x;
       dfs();}
    printf("%d",ans);
    system("pause");
    return 0;
}

这是正确的代码

2021/6/1 20:42
加载中...