8.13 美团笔试第四题

过了91%,听同学说改成long long就AC了,自以为逻辑应该没啥问题。抛砖引玉之。
题目:i<j<k满足于a[i] - a[j] = 2a[j] - a[k],求有几对。

#include <bits/stdc++.h>

using namespace std;
using LL = long long;

int main() {
    //freopen("test.txt", "r", stdin);
    ios::sync_with_stdio(false);
    int n, ans = 0;
    cin >> n;
    vector<LL> v(n);
    unordered_map<LL, vector<int>> m;
    for (int i = 0; i < n; ++i) {
        cin >> v[i];
        m[v[i]].push_back(i);
    }
    for (int i = 0; i < n; ++i) {
        for (int j = i + 1; j < n; ++j) {
            LL sum = v[i] + v[j];
            if (sum % 3 != 0) {
                continue;
            } else {
                LL the_num = sum / 3;
                if (m.find(the_num) == m.end()) {
                    continue;
                } else {
                    ans += m[the_num].end() -
                           upper_bound(m[the_num].begin(), m[the_num].end(), j);

                }
            }
        }
    }
    cout << ans;
    return 0;
}



#美团笔试#
全部评论
都是手撕代码吗
点赞 回复 分享
发布于 2022-08-15 18:23
大佬能不能解释下思路
点赞 回复 分享
发布于 2022-10-02 17:57 湖北

相关推荐

牛客410815733号:这是什么电影查看图片
点赞 评论 收藏
分享
1 2 评论
分享
牛客网
牛客企业服务