zoukankan      html  css  js  c++  java
  • HackerRank "Playing with numbers"

    This is 'Difficult' - I worked out it within 45mins, and unlocked HackerRank Algorithm Level 80 yeah!

    So the idea is straight forward:
    1. sort the input array and calculate partial_sum()
    2. find the negativepositive boundary with the accumulated given offset

    Note: in C++ you have to use 'long long' type all the way. I will switch to Python later..

    #include <cmath>
    #include <cstdio>
    #include <vector>
    #include <queue>
    #include <iostream>
    #include <algorithm>
    #include <unordered_map>
    #include <unordered_set>
    using namespace std;
    
    int main()
    {    
        int N, Q;
        
        //    Get Array
        cin >> N;
        vector<long long> v(N);
        for(int i = 0; i < N; i ++)
            cin >> v[i];
        
        //    Some processing
        sort(v.begin(), v.end());
        vector<long long> pre(N);
        partial_sum(v.begin(), v.end(), pre.begin());
        
        //    Go Query
        long long off = 0;
        cin >> Q;
        while(Q--)
        {
            long long tmp; cin >> tmp;
            off += tmp;
                    
            auto it = lower_bound(v.begin(), v.end(), -off);
            long long cnt_neg = it - v.begin();
            long long cnt_pos = N - cnt_neg;
            
            long long sum_neg = llabs(off * cnt_neg + pre[cnt_neg - 1]);
            long long sum_pos = llabs(off * cnt_pos + pre.back() - pre[cnt_neg - 1]);
            
            cout << (sum_neg + sum_pos) << endl;
        }
        return 0;
    }
  • 相关阅读:
    七。进度管理
    六。质量管理
    五。项目范围管理
    四。项目整体管理
    三。项目立项管理
    二。项目的一般只知识
    一。项目管理的管理领域
    8.BGP
    英语词汇基础
    vim中输入tab符
  • 原文地址:https://www.cnblogs.com/tonix/p/5166084.html
Copyright © 2011-2022 走看看