sukhoeing / aoapc-bac2nd-keys

算法竞赛入门经典第2版-习题选解
GNU General Public License v3.0
556 stars 123 forks source link

《习题与解答》P11 & P12 & P19,20 & P25 疑问 #13

Open RuiYu2021 opened 2 years ago

RuiYu2021 commented 2 years ago
P11
从上往下
vector<string> vec{1,2,3};
应改成
vector<string> vec{"1","2","3"};

P12
在HashFunc中,蒟蒻有些不清楚
return (hash<int>()(o.x) ^ hash<string>()(o.y) << 1) >> 1;
这一句最后的">>1"的作用.
假如值在先前的运算中已经一样的话,右移等于没效果.
假如值不一样,这样反而有极小的概率使得其相同,就Hash冲突了.
好像只会浪费时间诶,应该可以去掉吧.
RuiYu2021 commented 2 years ago
P19下方和P20上方两块内容非常相似,可以放一个函数完成.

P25
原本的E是这样求的:
int E=round(log10((v + M * lg2 - log10(pow(2,M) - 1)) / lg2 + 1) / lg2);
应该改成:
int E=round(log10((v + M * lg2 - log10(pow(2,M) - 0.5)) / lg2 + 1) / lg2);
以及下方的if内,应该改成:
if(fabs(((1 << E) - 1) * lg2 + log10(pow(2,M) - 0.5) - M * lg2 - v) <= EPS)
或许这题也可以直接枚举M , E并检验答案.

P26
最上方的链接失效了诶.