The 13th Shandong ICPC Provincial Collegiate Programming Contest

The 13th Shandong ICPC Provincial Collegiate Programming Contest

The 13th Shandong ICPC Provincial Collegiate Programming Contest
在这里插入图片描述

A. Orders

题意:有n个订单, 每日可生产k个产品,每个订单给出交付日和交付数量,是否能完成所有订单。

思路:按照交付日期进行排序,然后记录当前累计的产品数,能交付就交付,否则直接输出NO。

AC code:

void solve() {int n, k; cin >> n >> k;vector<PII> q(n);for (int i = 0; i < n; i ++) {cin >> q[i].first >> q[i].second;}sort(q.begin(), q.end());int now = 0, last = 0;for (int i = 0; i < n; i ++) {now += (q[i].first - last) * k;if (now >= q[i].second) now -= q[i].second, last = q[i].first;else {cout << "No" << endl;return;}}cout << "Yes" << endl;
}

B. Building Company

题意:

当前公司有g种员工,给出每种员工的编号以及数量;

现在需要承接n个项目,每种项目给出所需的m种员工编号以及所需数量;

如果当前公司员工数大于等于所需的各种员工数,则完成该项目,然后会有k种员工及相应数量加入公司;

每个项目最多完成一次,现在计算最多可以完成多少项目。

思路:

  • 首先记录当前公司中每种员工的数量;
  • 对于每项工程,记录第i项工程缺失的员工种类数,如果缺失数为0即当前可以完成该项目则存入一个队列中;
  • 对于每种员工,若第i个项目缺少j种员工,则在第j种员工后记录该项目;
  • 然后遍历当前队列,每次取出的即为当前可以完成的项目,然后遍历完成该项目可以获得的j种员工,再对缺少该种员工的项目进行遍历,若有了新增员工的当前项目可以满足,则项目缺失数–,项目缺失数为0则压入队列;
  • 存取每种员工所需公司时可以用小根堆的优先队列来存取,当出现大于当前员工数时直接break;

AC code:

void solve() {unordered_map<int, int> ump;int g; cin >> g;for (int i = 0; i < g; i ++) {int t, u; cin >> t >> u;ump[t] += u;}int n; cin >> n;int cnt = 0;queue<int> qq; //存完成的map<int, int> res; //每个项目差的map<int, vector<PII>> b;map<int, priority_queue<PII, vector<PII>, greater<PII>>> mp;for (int i = 0; i < n; i ++) {int tt = 0, k1, k2;cin >> k1;while (k1 --) {int u, v; cin >> u >> v;if (ump[u] < v) {tt ++;mp[u].push({v, i});} //不够}cin >> k2;while (k2 --) {int u, v; cin >> u >> v;b[i].push_back({u, v});}if (tt == 0) qq.push(i);res[i] = tt;}int ans = 0;while (!qq.empty()) {auto now = qq.front();ans ++;qq.pop();for (auto [x, y] : b[now]) {ump[x] += y;while (!mp[x].empty()) {auto [nd, pp] = mp[x].top();if (ump[x] >= nd) {res[pp] -= 1;mp[x].pop();if (res[pp] == 0) qq.push(pp);} else {break;}}}}cout << ans << endl;
}

D. Fast and Fat

题意:跑步比赛,一队有n名队员,给出每名队员的速度以及体重;一个队员可以背着另一个队员,i背j,若j的体重小于i,则对i的速度没有影响,否则i的速度vi - (wj - wi),若i的速度为负,则i无法背j;

求整体可能的最大速度,团队最慢成员即为团队速度。

思路:

二分团队最小速度,在check函数里将速度慢的人按照重量从大到小存取,然后将符合条件的人按照速度+重量从大到小进行存取,遍历当前不符合条件的人是否都能有人能背并且整体速度符合最小速度。

AC code:

PII q[N];struct cmp{bool operator() (const PII a, const PII b) {return a.first + a.second < b.first + b.second;}
};bool check (int aim) {priority_queue<PII, vector<PII>, cmp> pr;vector<int> w;for (int i = 0; i < n; i ++) {if (q[i].first >= aim){pr.push(q[i]);} else {w.push_back(q[i].second);}}if (pr.size() == n) return true;if (pr.size() < w.size()) {return false;}sort(w.begin(), w.end(), greater<int>());for (auto x : w) {if (!pr.empty()) {auto [u, v] = pr.top();pr.pop();if (u + v - x >= aim) continue;else {return false;}} else {return false;}}return true;
}void solve() {cin >> n;for (int i = 0; i < n; i ++) {cin >> q[i].first >> q[i].second;}sort(q, q + n);int l = 0, r = 2e9;while (l < r) {int mid = l + r + 1 >> 1;if (check(mid)) l = mid;else r = mid - 1;}cout << l << endl;
}

E. Math Problem

题意:

给定两个正整数 n和k,你可以执行以下两种类型的运算任意多次(包括零次):

  • 选择一个满足 0<=x<k的整数 x,将n改为k*n+x 。执行一次这个操作需要花费 a 枚金币。每次选择的整数 x可以不同。
  • 将 n改为n/k 。执行此操作一次需要花费 b枚金币。

给定正整数 m ,计算将 n 变为 m的倍数所需的最少金币数。请注意, 0 是任何正整数的倍数。

思路:

  • 首先一定是先除后乘,才不会覆盖乘的操作,才能最小化使用硬币数;
  • 然后枚举除的次数以及乘的次数,当出现符合条件的值时跳出寻找下一可能的操作;
  • 枚举乘的操作时,看当前第j次乘后的值,距离最近的比当前值大于等于的m的倍数是否小于k^j,符合则说明当前操作可行;
  • 需要注意的是在计算过程中C++会爆longlong,所有我们需要int128来进行存取中间值;

AC code:

ll qmi(int a, int k) {ll res = 1;while (k) {if (k & 1) res = res * a;a = a * a;k >>= 1;}return res;
}void solve() {int n, k, m, a, b; cin >> n >> k >> m >> a >> b;if (n % m == 0) {cout << 0 << endl;return;} if (k == 1) {cout << "-1" << endl;return;}ll now = n;int ans = 2e18;for (int i = 0; now > 0; i ++) {if (i > 0) now /= k;ll ca = now;for (int j = 0; ;j ++) {if (j == 0) {if (now % m == 0) ans = min(ans, (b * i));continue;}ca *= k;ll nxt = m * ((ca / m) + (ca % m != 0));if ((nxt - ca) < (ll)qmi(k, j)) {ans = min(ans, (b * i + a * j));break;}}}cout << ans << endl;
}

G. Matching

题意:

给定一个长度为n的整数序列 ,我们从该序列构建一个无向图G 。更确切地说,对于所有1 <= i,j<=n ,如果 i-j=ai-aj ,则 G中会有一条连接顶点 i和 j 的无向边。这条边的权重为ai+aj 。

请为 G找出一个匹配项,使匹配项中所有边的权重之和最大,并输出这个最大值。

回想一下,无向图的匹配意味着我们从图中选择一些边,使得任意两条边都没有共同的顶点。具体来说,不选择任何边也是匹配。

思路:

  • 首先变换一下式子i - ai = j - a[j];
  • 然后我们用优先队列存取所有点-权值相等的点,对于每个可以匹配的点取出最大的两个加入到总权值中即为所求;

AC code:

void solve() {int n; cin >> n;map<int, priority_queue<int>> mp;for (int i = 1; i <= n; i ++) {int x; cin >> x;mp[i - x].push(x);}int cnt = 0;for (auto [x, y] : mp) {while (mp[x].size() > 1) {auto a = mp[x].top(); mp[x].pop();auto b = mp[x].top(); mp[x].pop();if (a + b > 0) cnt += a + b;}}cout << cnt << endl;
}

I.Three Dice

题意:略;

思路:枚举即可;

AC code:

void solve() {int a, b; cin >> a >> b;for (int x = 1; x <= 6; x ++) {for (int y = 1; y <= 6; y ++) {for (int z = 1; z <= 6; z ++) {int rd = 0, bk = 0;if (x == 1 || x == 4) rd += x;else bk += x;if (y == 1 || y == 4) rd += y;else bk += y;if (z == 1 || z == 4) rd += z;else bk += z;if (rd == a && bk == b) {cout << "Yes" << endl;return;}}}} cout << "No" << endl;
}

L. Puzzle: Sashigane

题意:在n*n的白色正方形矩阵中,有一个黑色方块,现在需要将除了黑色方块外的所有白色方块用L形覆盖;

思路:围绕黑色方块向外拓即可,n-1次内必成;

AC code:

void solve() {int n, x, y; cin >> n >> x >> y;cout << "Yes" << endl;cout << n - 1 << endl;int len = 1, t = 1;int lx = x, ly = y, rx = x, ry = y;for (int i = 1; i < n; i ++) {if (lx > 1 && ly > 1) {lx --, ly --;cout << lx << ' ' << ly << ' ' << len << ' ' << len << endl;} else if (rx < n && ry < n) {rx ++, ry ++;cout << rx << ' ' << ry << ' ' << -len << ' ' << -len << endl;} else if (lx == 1 && ry == n) {cout << rx + t << ' ' << ly - t << ' ' << -len << ' ' << len << endl;t ++;} else if (rx == n && ly == 1) {cout << lx - t << ' ' << ry + t << ' ' << len << ' ' << -len << endl;t ++;}len ++;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/328953.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

究极完整版!!Centos6.9安装最适配的python和yum,附带教大家如何写Centos6.9的yum.repos.d配置文件。亲测可行!

前言&#xff01; 这里我真是要被Centos6.9给坑惨了&#xff0c;最刚开始学习linux的时候并没有在意那么的&#xff0c;没有考虑到选版本问题&#xff0c;直到23年下半年&#xff0c;官方不维护Centos6.9了&#xff0c;基本上当时配置的文件和安装的依赖都用不了了&#xff0c…

OpenAI发布会最新消息!ChatGPT新功能发布!

关于即将发布的内容&#xff0c;OpenAI 官方帖子提供的唯一细节是&#xff0c;此次发布将更新 ChatGPT 及其最新模型 GPT-4。 OpenAI 员工程博文&#xff08;Bowen Cheng&#xff09;跟了个帖&#xff0c;「比 gpt-5 更酷」&#xff0c;不过又迅速删帖。 OpenAI 的葫芦里到底卖…

电商秒杀系统设计

业务流程 系统架构 系统挑战 高并发:秒杀活动会在短时间内吸引大量用户,系统需要能够处理高峰时期的大量并发请求 库存同步:在秒杀中,面临的一个严重系统挑战是如何确保在数以万计的用户同时抢购有限的商品时,如何正确、实时地扣减库存,以防止超卖现象。 防止恶意抢购和…

儿童护眼台灯哪个牌子好,适合儿童使用的护眼台灯推荐

护眼台灯在近几年成为家长和经常与电子设备打交道的人士中备受瞩目的家用电器。对于有孩子的家庭而言&#xff0c;它几乎成为了必备品&#xff0c;许多消费者已经对其有了一定的了解并进行了购买。然而&#xff0c;仍有部分家长对护眼台灯的效果和重要性缺乏充分认识&#xff0…

Dreamweaver 2021 for Mac 激活版:网页设计工具

在追求卓越的网页设计道路上&#xff0c;Dreamweaver 2021 for Mac无疑是您的梦幻之选。这款专为Mac用户打造的网页设计工具&#xff0c;集强大的功能与出色的用户体验于一身。 Dreamweaver 2021支持多种网页标准和技术&#xff0c;让您能够轻松创建符合现代网页设计的作品。其…

iisnginx环境一次奇怪的跨域问题解决经过

跨域问题描述&#xff1a; iis网站跨域、nginx 网站跨域 都已配置&#xff0c;访问接口依然出现跨域问题。 错误提示&#xff1a; ccess to XMLHttpRequest at ‘https://xxx.com/gameapi/preserve/get/status’ from origin ‘https://cdn.xxx.com’ has been blocked by CO…

技术前沿 |【大模型LLaMA:技术原理、优势特点及应用前景探讨】

大模型LLaMA&#xff1a;技术原理、优势特点及应用前景探讨 一、引言二、大模型LLaMA的基本介绍三、大模型LLaMA的优势特点五、结论与展望 一、引言 随着人工智能技术的飞速发展&#xff0c;大模型已成为推动这一领域进步的重要力量。近年来&#xff0c;大模型LLaMA以其卓越的…

每日一题——力扣206. 反转链表(举一反三、思想解读)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三题目链接 目录 菜鸡写法​编辑 代码点评 代码分析 时间复杂度 空间复杂度 专业点评 另一种方法​编辑 代码点评 代码逻辑 时间复杂度 空间…

基于火山引擎云搜索的混合搜索实战

在搜索应用中&#xff0c;传统的 Keyword Search 一直是主要的搜索方法&#xff0c;它适合精确匹配查询的场景&#xff0c;能够提供低延迟和良好的结果可解释性&#xff0c;但是 Keyword Search 并没有考虑上下文信息&#xff0c;可能产生不相关的结果。最近几年&#xff0c;基…

第三十二天 | 46.全排列 47.全排列||

终于进入排列&#xff01;&#xff08;之前都是组合&#xff09; 排列和组合的区别&#xff1a;在数学上的区别都懂&#xff0c;主要是看在代码实现上有什么区别 题目&#xff1a;46.全排列 树型结构比较简单 用used标记某一元素是否使用过。在组合问题中&#xff0c;其实是…

【Amplify_自己写的shadr遇到没有阴影的解决方案】

Amplify 自己写的shadr遇到没有阴影的解决方案 2020-01-21 16:04 本来我有个百试很灵的投射阴影脚本。 这次不灵光了&#xff01;地形内建材质&#xff0c;这个不支持投射的阴影~~奇了怪了。 可以采用引用的方式UsePass加入阴影部分代码&#xff0c;具体操作如下&#xff1…

.NET 4.8和.NET 8.0的区别和联系、以及查看本地计算机的.NET版本

文章目录 .NET 4.8和.NET 8.0的区别查看本地计算机的.NET版本 .NET 4.8和.NET 8.0的区别 .NET 8.0 和 .NET 4.8 之间的区别主要体现在它们的发展背景、目标平台、架构设计和功能特性上。下面是它们之间的一些主要区别&#xff1a; 发展背景&#xff1a; .NET 4.8 是.NET Fram…

WSL2-Ubuntu(深度学习环境搭建)

1.在Windows的WSL2上安装Ubuntu 流程可参考&#xff1a;https://www.bilibili.com/video/BV1mX4y177dJ 注意&#xff1a;中间可能需要使用命令wsl --update更新一下wsl。 2.WSL数据迁移 按照下面流程&#xff1a;开始菜单->设置->应用->安装的应用->搜索“ubun…

LAMP与动静态网站介绍

黄金架构LAMP Httpd PHP MySQL 三这如何工作 为什么说LAMP是黄金架构呢&#xff1f; 在互联网刚刚新起时&#xff0c;很多门户网站第一代架构都是采用LAMP&#xff0c;比如新浪&#xff0c;一些电商的互联网公司的站点&#xff0c;他们在网站第一代架构出行&#xff0c;用的都…

JETBRAINS IDES 分享一个2099通用试用码!DataGrip 2024 版 ,支持一键升级

文章目录 废话不多说上教程&#xff1a;&#xff08;动画教程 图文教程&#xff09;一、动画教程激活 与 升级&#xff08;至最新版本&#xff09; 二、图文教程 &#xff08;推荐&#xff09;Stage 1.下载安装 toolbox-app&#xff08;全家桶管理工具&#xff09;Stage 2 : 下…

VUE 滚动到指定区域scrollIntoView

背景&#xff1a;当前 VUE 页面数据量很大&#xff0c;右侧出现滚动条, 进入该页面&#xff0c;页面定位到指定区域&#xff1b; 项目要求&#xff1a; 进入页面&#xff0c;定位到指定行&#xff08;红色标记&#xff09; 直接看效果&#xff1a; 代码demo&#xff1a; <…

Unity设计模式之工厂模式

什么是工厂模式&#xff1f; 工厂是一种创建型设计模式。通俗来讲就是提供一种封装对象创建的方式&#xff0c;将对象的创建和使用区分开。就是Unity里面通常用到的创建和管理对象。 工厂模式有什么优点&#xff1f; 1、封装对象的创建方式&#xff0c;使其更加灵活、易于管理…

中美在AI大模型的商业化和产业化的优势和面临的挑战有哪些?

中美在AI大模型的商业化和产业化的优势和面临的挑战有哪些&#xff1f; 中美在AI大模型的商业化和产业化方面各有优势&#xff0c;但也面临不少挑战。 一、优势 1、技术领先 美国在AI大模型领域拥有深厚的技术储备和布局&#xff0c;如OpenAI的GPT系列、谷歌的BERT等&#…

【前段】开发五子棋小游戏全流程

使用前端技术开发五子棋小游戏 在这篇博文中,我们将详细介绍如何使用HTML、CSS和JavaScript开发一个简单的五子棋小游戏。我们将展示如何初始化棋盘、处理用户交互以及实现胜负判定。特别是,我们将着重介绍胜负判定的逻辑实现。 完整代码我放在了这里:github 项目结构 项…

EE trade:现货黄金交易有哪些优势

现货黄金交易具有多种优势&#xff0c;使其成为许多投资者青睐的投资选择&#xff1a; 流动性高&#xff1a;黄金市场是全球最大的金融交易市场之一&#xff0c;确保了黄金拥有极高的流动性。这意味着投资者可以随时买入或卖出黄金&#xff0c;几乎不必担心大额交易会对市场价…