华为2023暑期笔试(1-1)

news/2024/11/18 18:34:12/

题目:

  有一个核心交易系统接口被N个上游系统调用,每个上游系统的调用量R=[R1,R2,…,RN]。由于核心交易系统集群故障,需要暂时系统降级限制调用,核心交易系统能接受的最大调用量为cnt。
  设置降级规则如下: 如果sum(R1,R2…RN) 小于等于cnt,则全部可以正常调用,返回-1; 如里sum(R1,R2…RN)大于cnt,设置一个阈值limit,如果某个上游系统发起的调用量超过limlt,就将该上游系统的调用量限制为limit,其余未达到limit的系统可以正常发起调用。
  求出这个最大的limit (limit可以为0)。

输入:

第一行:每个上游系统的调用量 (整型数组)
第二行:核心交易系统的最大调用量

输出:

调用量的阈值limit

样例:

输入:
1 4 2 5 5 1 6
13
输出:2

解释:因为1+4+2+5+5+1+ 6>13; 将limit设置为2,则1+2+2+2+ 2+1+2=12<13,所以limit为2。

输入:
1 7 8 8 10 2 4 9
7
输出:0

解释:因为即使limit设置为1。1+1+1+1+1+1+1+1=8>7也不满足,所以limit只能为0。

思路:

  1. 输入一个向量R=[R1,R2,…,RN],输入最大调用量为cnt;
  2. 如果sum(R1,R2…RN) 小于等于cnt,返回-1;
  3. 如果sum(R1,R2…RN) 大于cnt,调用函数getlimit(R,cnt)求limit;
    函数本质,找到一个最小的数,使得R经过这个数滤波后,求和值尽可能接近cnt。
    方法一暴力求解:可以先用cnt/N向下取整得到pcnt,如果小于1,则返回0;然后cnt = cnt-n个min(R),还剩N = N-n个数,继续向下取整更新pcnt,如果大于之前的值则记录。一直遍历完全部的数组。
    方法二:利用二分法和中位数去逼近limit。

方法二代码:(上面这个超int了)

#include <iostream>
#include <vector>
#include <algorithm>
# include<numeric>
using namespace std;int getlimit(vector<int> R, int cnt) {int left = 0;int right = R.size()-1;int limit = R[left];while (left<right) {  // 二分法找到最接近的limitint p = (left + right) / 2;if (accumulate(R.begin(), R.begin() + left, (R.size() - left) * R[left]) < cnt){left = p;}else { right = left; }limit = R[left];}for (int i = 1; i <= R[left]; i++)  // 进一步逼近{if (accumulate(R.begin(), R.begin() + left, (R.size() - left) * limit) > cnt){limit = R[left]-i;}else { break; }}return limit;
}int main()
{int cnt;vector<int> R;while (1) {   // 输入不定长的Rcin >> cnt;R.push_back(cnt);if (cin.get()=='\n') { break; }}cin >> cnt;sort(R.begin(),R.end());int sum = accumulate(R.begin(), R.end(), 0);if (sum <= cnt) { cout << "-1"; }else { int limit = getlimit(R, cnt); cout << limit; }return 0;
}
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {int n;vector<int> R;while (cin >> n) {R.push_back(n);}R.erase(--R.end());int Rsize = R.size();if (Rsize > n) {cout << 0 << endl;return 0;}int maxR = *max_element(R.begin(), R.end());int left = 0, right = maxR;while (left < right) {int mid = left + (right - left + 1) / 2;long long sum = 0;for (int i = 0; i < Rsize; ++i) {if (R[i] < mid) {sum += R[i];}else {sum += mid;}}if (sum <= n) {left = mid;}else {right = mid - 1;}}cout << (left == maxR ? -1 : left) << endl;return 0;
}

http://www.ppmy.cn/news/51071.html

相关文章

GPT模型成功的背后用到了哪些以数据为中心的人工智能(Data-centric AI)技术?

人工智能&#xff08;Artificial Intelligence, AI&#xff09;最近取得了巨大的进展&#xff0c;特别是大语言模型&#xff08;Large Language Models, LLMs&#xff09;&#xff0c;比如最近火爆全网的ChatGPT和GPT-4。GPT模型在各项自然语言处理任务上有着惊人的效果。至于具…

gpt 怎么用-免费gpt下载使用方法

gpt 怎么用 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一种基于Transformer的神经网络模型&#xff0c;用于自然语言处理任务&#xff0c;例如文本生成、摘要生成、翻译、问答等。以下是使用GPT进行文本生成的一般步骤&#xff1a; 首先&#xff0c;您…

增长黑武器|LTD荣获“2023中国工业数字化赋能奖先锋”

​ 2014年&#xff0c;北京 2015年&#xff0c;南昌 2016年&#xff0c;上海 ...... 2022年&#xff0c;南京 2023年&#xff0c;4月21日 由中国生产力促进中心协会数字经济工作委员会提供指导&#xff0c;由托比网主办的“第六届中国工业数字化高峰论坛”在上海举行。本…

Thymeleaf——视图模板技术

Thymeleaf——视图模板技术 添加thymeleaf的jar包新建一个Servlet类ViewBaseServlet在web.xml文件中添加配置 ——配置前缀 view-prefix ——配置后缀 view-suffix使得我们的Servlet继承ViewBaseServlet根据逻辑视图名称得到物理视图名称 //此处的视图名称是index //那么thym…

Python爬虫基础-如何获取网页源代码

Python爬虫基础-如何获取网页源代码 网络爬虫(Web Crawler)&#xff0c;又称网页蜘蛛(Web Spider)&#xff0c;是一种按照一定的规则&#xff0c;自动地抓取万维网信息的程序或者脚本。爬虫程序根据一组特定的规则自动的访问网站&#xff0c;然后抓取网页上的内容&#xff0c;进…

[强化学习]学习路线和关键词拾零

强化学习学习方法和路线 学习路线 先从基础教材开始&#xff0c;构建RL的知识框架&#xff0c;熟悉关键名词和公式推导&#xff0c;扩展到Model-Free的Value-Based和Policy-Based方法&#xff0c;同时参考github的代码练习。接下来精读几篇经典论文&#xff0c;如DQN,PPO等。…

银行数字化转型导师坚鹏:商业银行数字化风控(2天)

商业银行数字化风控 课程背景&#xff1a; 数字化背景下&#xff0c;很多银行存在以下问题&#xff1a; 不清楚商业银行数字化风控发展现状&#xff1f; 不清楚对公业务数字化风控工作如何开展&#xff1f; 不知道零售业务数字化风控工作如何开展&#xff1f; 课程特色…

借灰姑娘的手,讲述js混淆加密的美丽

这个故事的主角是灰姑娘&#xff0c;她有一个重要的秘密&#xff0c;需要将其保护起来。但是&#xff0c;她发现她的网站上的 JavaScript 代码很容易被其他人阅读和修改&#xff0c;为了保护这个秘密&#xff0c;她需要采用一些混淆和加密技术。 以下是她使用的一些技术&#…