为什么用string过不了用char[]可以过
查看原帖
为什么用string过不了用char[]可以过
105604
醉里挑灯看剑楼主2021/9/23 17:31

这是char的

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
ull base=13331;
ull hashh[12345];
char c[10214];
int prime=233317;
ull mod= 2123704414014795711;
ull hashe()
{
	int len=strlen(c);
	ull ans=0;
	for(int i=0;i<len;i++)
	ans=(ans*base+c[i]-'0')&mod+prime; 
	return ans;
}
int main()
{
	int n,cnt=1;
	cin>>n;getchar();
	for(int i=1;i<=n;i++)
	{
	scanf("%s",c);
	hashh[i]=hashe();
    }
    sort(hashh+1,1+hashh+n);
    for(int i=1;i<n;i++)
    if(hashh[i]!=hashh[i+1])cnt++;
    cout<<cnt<<endl;
    return 0;
}

这是string的

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
ull base=13331;
ull hashh[12345];
string s;
int prime=233317;
ull mod= 2123704414014795711;
ull hashe()
{
	int len=s.size();
	ull ans=0;
	for(int i=0;i<len;i++)
	ans=(ans*base+s[i]-'0')&mod+prime; 
	return ans;
}
int main()
{
	int n,cnt=1;
	cin>>n;getchar();
	for(int i=1;i<=n;i++)
	{
	getline(cin,s);
	hashh[i]=hashe();
    }
    sort(hashh+1,1+hashh+n);
    for(int i=1;i<n;i++)
    if(hashh[i]!=hashh[i+1])cnt++;
    cout<<cnt<<endl;
    return 0;
}

自己运行都是完全正确的,不知道为什么用string只有80分,求大佬指点

2021/9/23 17:31
加载中...