C++中map底层实现是红黑树(平衡二叉搜索树),而unordered_map是哈希表(哈希桶 + 链表 / 红黑树)
#include <iostream> // #include <map> // 红黑树 #include <unordered_map> // 哈希表 using namespace std; int main() { // map<unsigned long long, unsigned long long> fx; // fx[i] 默认值为 0 unordered_map<unsigned long long, unsigned long long> fx; unsigned long long n, ans=0; cin >> n; for (unsigned long long i=1; i<=n; i++) { unsigned long long x, y; cin >> x >> y; ans += i*fx[x]; fx[x] = y; } cout << ans << endl; } // 64 位输出请用 printf("%lld")
之前“字符串哈希”的 PolynomialHash 通过重载 operator[] 可以实现类似 map 的 [] 用法,但是感觉实现这里的大整数哈希还是很复杂,不管了