得物(0823笔试)

开幕式排练

时间限制:3000MS 内存限制:655360KB

题目描述:

导演在组织进行大运会开幕式的排练,其中一个环节是需要参演人员围成一个环形。演出人员站成了一圈,出于美观度的考虑,导演不希望某一个演员身边的其他人比他低太多或者高太多。

现在给出n个参演人员的身高,问在他们站成一圈时,相邻演员的身高差的最大值至少是多少? 请你帮忙计算。

输入描述

输入包括两行,第一行有1个正整数,代表人数n。

第二行有n个空格隔开的正整数h表示第i个演员的身高。

数据保证2<=n<=10^5,1<=hi<=10^9。

输出描述

输出包括一个正整数,表示答案。

样例输入

样例输出

思路:注意题目描述需要满足参演人员身边的人身高不要太低或者太高,即包含参演人员左边的人与右边的人与自己的身高差不能太大。于是可以将数组排序,然后声明一个新数组,均匀的向两边插入元素,最后求出相邻演员身高差的最大值。

#include <bits/stdc++.h>
using namespace std;

int main(){
   int n;
   cin>>n;
   vector<int> nums(n);
   for(int i=0;i<n;i++) cin>>nums[i];
   sort(nums.begin(),nums.end());
   vector<int> ans;
   ans.push_back(nums[n-1]);
   int j=0;
   for(int i=n-2;i>=0;i--){
      if(j % 2==0) ans.push_back(nums[i]);
      else ans.insert(ans.begin(),nums[i]);
      j = j^1;     //每次将j在0和1之间取值,方便往数组两边插值
   }
   int maxx=0;
   for(int i=0;i<n;i++)
       maxx=max(maxx,abs(ans[i]-ans[(i+1)%n]));      //注意存在环形队列,即可通过取模的方式实现最后一个元                                                       素与第一个元素的差值计算
   cout <<maxx<< endl;
}

最少数字

小明用计算机随机生成了N个正整数,他希望从这N个数中选取若千个数,使得它们的和等于M。这些随机生成的数字可能会相同,但是每个数字最多只允许使用一次。

当然这样的选取方案可能不存在,也可能有多个。现在希望你编写一个程序,能够找出数字个数最少的选取方案,输出对应的最少数字的个数,如果无解输出“No solution”。

输入描述

单组输入,每组输入2行。

第1行包含两个正整数N和M,分别表示初始输入的正整数个数和目标数字和(N<=1e3,M<=1e5)。

第2行为N个正整数,两两之间用空格隔开(每一个正整数均小于等于1e5)。

输出描述

输出数字个数最少的选取方案中所包含的最少数字个数,如果无解输出“No solution”。

样例输入

样例输出

思路:动态规划,dp[i][j]表示用i个数字能够组成和为j的最小数字个数。

#include <bits/stdc++.h>
using namespace std;

int solve(vector<int>& numbers, int targetSum) {
    int n = numbers.size();
    vector<vector<int>> dp(n + 1, vector<int>(targetSum + 1, INT_MAX / 2));
    dp[0][0] = 0;
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j <= targetSum; j++) {
            dp[i][j] = dp[i - 1][j];
            if (j >= numbers[i - 1]) {
                dp[i][j] = min(dp[i][j], dp[i - 1][j - numbers[i - 1]] + 1);
            }
        }
    }

    return (dp[n][targetSum] == INT_MAX / 2) ? -1 : dp[n][targetSum];
}

int main() {
    int N, M;
    cin >> N >> M;
    vector<int> numbers(N);
    for (int i = 0; i < N; i++) {
        cin >> numbers[i];
    }

    int minCount = solve(numbers, M);

    if (minCount == -1) {
        std::cout << "No solution" << std::endl;
    } else {
        std::cout << minCount << std::endl;
    }

    return 0;
}

#秋招笔试#
全部评论
动态规划太强啦
点赞 回复 分享
发布于 2023-08-31 17:57 浙江
第一道题思路是这样的,结果超时了,,,
点赞 回复 分享
发布于 2023-08-25 19:38 浙江

相关推荐

06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
评论
7
11
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务