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;
}
posted @ 2021-10-19 16:54  Jijidawang  阅读(6)  评论(0)    收藏  举报  来源