京东笔试

70%,0%,0%

/*
差值不能大于k的数对相乘之和,数对用一次就删了,70%
*/
#include <bits/stdc++.h>
#include <functional>
using namespace std;

int main() {
    int n,k;
    cin>>n>>k;
    vector<int>arr(n);
    for(auto& x:arr)
    cin>>x;

    long long sum=0;
    sort(arr.begin(),arr.end(),greater<int>());
    for(int i=0;i<n-1;i++)
    {
        if(arr[i]-arr[i+1]<k)
        {
            sum+=arr[i]*arr[i+1];
            i++;
        }
    }
    cout<<sum;
}//   4 1 1 1 


/*
走地砖,一次一步或两步,最少代价(超时,0%)
*/
#include <bits/stdc++.h>
using namespace std;
const int inf=1e9;
int main() {
    int n;
    cin>>n;
    vector<int> arr(n);
    for(auto& x:arr)
    cin>>x;
    int ret=inf;
    //dfs:左为走一步,走为走两步
    //当走两步走超了,那这条分支就去掉,提前判断
    function<void(int,int)> dfs=[&](int i,int cost){
        if(i==n){ret=ret>cost?cost:ret;return;}
        dfs(i+1,cost+arr[i+1]);
        if(i+2<=n)
        {
            dfs(i+2,cost+arr[i+2]);
        }
    };
    dfs(0,0);
    cout<<ret;
}

/*
子数组权值,a1*1+a2*2+a3*3  (不会)
*/
#include<bits/stdc++.h>
using namespace std;
const int inf = 1e9 + 7;
int sum = 0;
int sum_subarr(vector<int>& subarr) {
    int s = 0;
    for (int i = 0; i < subarr.size(); i++) {
        cout << subarr[i] << " ";
        s += (subarr[i] * (i + 1));
        s %= inf;
    }
    cout << endl;
    return s;
}

int main() {
    int n;
    cin >> n;
    vector<int> arr(n);
    for (auto& x : arr)
        cin >> x;
    vector<int> tmp;//统计每一个数应该被加的次数
    function<void(int, int, vector<int>&)> dfs = [&](int i, int d,
    vector<int>& tmp) {
        if (i == n) {
            sum += sum_subarr(tmp);
            sum %= inf;
            return;
        }
        if (d == 0) {//第一层扩展全部,其余层只扩展一个后面元素
            for (; i < n; i++) {
                tmp.push_back(arr[i]);
                //cout<<i<<" "<<sum<<" tmp:"<<tmp.size()<<endl;
                dfs(i + 1, d + 1, tmp);
                tmp.pop_back();
            }
        } else {
            if (i + 1 < n) {
                tmp.push_back(arr[i + 1]);
                dfs(i + 1, d, tmp);
                tmp.pop_back();
            }
        }
    };
    dfs(0, 0, tmp);
    //cout << sum;

    /*
    第一个数被加了3次
    第二个数被作为2号,加了两次相当于4次,还有自己1次       4+1
    第三个数,被当做2一次,相当于2次,被当做3一次,相当于3, 2+3
    */
    /*         0
          1   2      3
        2       3
       3
    */
}

全部评论
做了一星期多了都没面试
1 回复 分享
发布于 2023-09-09 21:08 浙江
我是第1题5%,然后100%,然后20%。第3题我最后感觉可以优化好了,但是时间不够了。第1题我想了半天,不知道我用贪心做为什么就是不对。
1 回复 分享
发布于 2023-09-09 21:06 浙江
a = {5,4,4,3,1,1} k=2,答案是21把,因为我记得题目说选过的数字不能选,所以4,3不能选。
点赞 回复 分享
发布于 2023-09-10 21:38 江苏
ak了,这次其实题目相对之前算是比较简单了
点赞 回复 分享
发布于 2023-09-10 01:34 湖北
第一题改long long且<=k,第二题最小代价爬楼梯(经典dp),第三题找规律(后一个比前一个少了哪些,多了哪些)
点赞 回复 分享
发布于 2023-09-09 21:09 黑龙江
第一题我只能sort加双指针,秒了,后面第二题像是台阶问题,直接没做了,听左神讲过,后面忘了
点赞 回复 分享
发布于 2023-09-09 21:08 湖北
第一题是小于等于k
点赞 回复 分享
发布于 2023-09-09 21:07 湖北
第一题我也没过,不知道哪里出问题了
点赞 回复 分享
发布于 2023-09-09 21:06 上海

相关推荐

03-27 20:14
前端工程师
投票
Spring启动:我在一嗨呆过,这么说吧 神仙单位,除了工资不怎么好 剩下的基本上天花板了,上班下班跟公务员似的,一天工作7个点,提供宿舍,宿舍离公司1km, 项目不着急,一般来说1天的活,你要个4天没人管你,我一天上班4个点在微信上跟别人聊天😂 去那边老自在了 但是也有可能是 我们组比较好
点赞 评论 收藏
分享
吴offer选手:学到了,下次面试也放张纸在电脑上,不然老是忘记要说哪几个点
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务