T2建桶的另一种思路
基本思路都是一样的:扫一遍桶,算 $\sum^{199}_{i=0} \sum^{a_i-1}_{j=1} j$ ($a$ 是桶)
我们知道, T2直接把数 $\bmod 200$ 扔进桶里是会 WA0pts
的(痛失100pts)
因为很明显如果 $i$ 是 $<200$ 的正数,那么 $i\bmod 200$ 和 $(i-200)\bmod200$ 显然是两个数。
如果这两个数同时在数列里出现就锅了。
上面的和其他题解都是一样的。接下来就是消除负数了。
其实有一个很简单的方法:数列整体加上$10^9$。
#include <iostream>
#include <unordered_map>
#define int long long
#define f(n) n * (n - 1) / 2
using namespace std;
unordered_map<int, int> cnt;int n, ans;
signed main()
{
cin >> n;
for(int i = 0, t;i < n;++i)
cin >> t, ++cnt[(t + 1000000000) % 200];
for(auto &i : cnt)
ans += f(i.second);
cout << ans;
return 0;
}