1》

如果a,b互质,只能说明gcd(a,b)==1,而不能说明a为质数,b为质数。

如果用快速幂求逆元,必须保证mas是质数。

如果存在逆元,不一定可以使用快速幂求逆元。

因为存在逆元,只能说明和gcd(a,mas)=1,但是不能说明mas为质数

 2》

(1)string x;

 1.只可以使用cin输入

2.输入的时候只可以从首地址开始输入,cin>>x。cin>>x+1错误

3.比较str和“pop”是否相等   if(str=="pop)

(2)scanf("%s",str)

1.只可以使用scanf输入

2.输入的时候可以不从首地址开始进行输入,scanf("%s",str+a)

3.scanf("%s",str);比较str和"pop"是否相等

if(str=="pop")错误

只可以使用if(!strcmp(str,"pop"))

strcmp小于-1,等于0,大于1;

 

3》

采用字符串哈希的时候:

1>注意使用ull

2>定义两个数组都是ull,一个用来记录p^i,一个记录字符串哈希的数值;

3> v[i]=v[i-1]*p+str[i]-'a'+1;//注意为了防止0,00,000,冲突,映射结果一边不会映射为0的位置,;

因此a会映射到1,而不是0。如果是0,那么0,00,000实际就是0,原来的就是a,aa,aaa.映射的结果相等,但是实际上不相等。

4>实际上,如果不使用ull的默认取mod  2^64

可以自己定义一个mod,但是这mod和p实际上会直接影响着,答案是否正确。因为字符串哈希,实际上本身就是一种运气。

按照经验来说,选取p=131或者p=1331,mod=2^64冲突的概率最小。

如果有范围的话,p=131或p=1331,mod取稍微大于范围的一个质数的情况,冲突的概率会最低。

4》

规范一下数组变量的使用:

字符串数组就采用,str

整数数组就采用,v;

bool数组就使用,vis;

数组下标   const int N=1e5//不在使用mas

数字mod就使用 const int mod=1e9+7;

 数组模拟图;idx,ne[],n[],h[].初始默认值是-1截至标志,h[i]=-1

posted on 2022-08-23 15:31  浅唱\,,笑竹神易  阅读(25)  评论(0)    收藏  举报