2024.3.21 训练记录(21)

文章目录

  • CF 449B Jzzhu and Cities
  • CF 1945E Binary Search
  • CF 1945F Kirill and Mushrooms
  • CF 1945G Cook and Porridge
  • CF 1349B Orac and Medians

CF 449B Jzzhu and Cities

题目链接

首先跑dijkstra,记录下每个点最短路的入度,然后遍历每一条铁路,如果最短路小于铁路长度,这个铁路就可以删掉,如果最短路等于铁路长度并且最短路入度大于1,说明还有其他路径可以到这个点,就把入度减一并且把这条铁路删掉

这一题的收获是学会了计算到达每个点的最短路径有多少条的方式,就是在更新最短路的时候同时更新最短路入度

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;const int N = 1e5 + 10;
const int mod = 1e9 + 7;
const int maxn = 1e6 + 10;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;void solve()
{int n, m, k;cin >> n >> m >> k;vector<vector<PII>> g(n + 1);vector<int> ind(n + 1);vector<PII> rot(k);for (int i = 0; i < m; i ++ ){int u, v, x;cin >> u >> v >> x;g[u].push_back({v, x});g[v].push_back({u, x});}for (int i = 0; i < k; i ++ ){int u, x;cin >> u >> x;g[1].push_back({u, x});g[u].push_back({1, x});rot[i] = {u, x};}vector<int> dist(n + 1, INF);vector<bool> st(n + 1, false);priority_queue<PII, vector<PII>, greater<PII>> q;q.push({0, 1});dist[1] = 0;while (q.size()){auto t = q.top();q.pop();int ver = t.second, dd = t.first;if (st[ver]) continue;st[ver] = true;for (int i = 0; i < g[ver].size(); i ++ ){int j = g[ver][i].first;if (dist[j] > dist[ver] + g[ver][i].second){dist[j] = dist[ver] + g[ver][i].second;ind[j] = 1;q.push({dist[j], j});}else if (dist[j] == dist[ver] + g[ver][i].second){ind[j] ++ ;q.push({dist[j], j});}}} int ans = 0;for (auto t : rot){if (dist[t.first] < t.second) ans ++ ;else if (dist[t.first] == t.second && ind[t.first] > 1){ind[t.first] -- ;ans ++ ;}}cout << ans << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;// cin >> t;while (t--){solve();}
}

CF 1945E Binary Search

题目链接

这题原来只需要按二分步骤做,最后交换x的位置和l的位置就可以了,白瞎昨天写了一个小时

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;const int N = 1e5 + 10;
const int mod = 1e9 + 7;
const int maxn = 1e6 + 10;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;void solve()
{int n, x;cin >> n >> x;vector<int> a(n + 1);int pos;map<int, int> mp;set<int> st;for (int i = 1; i <= n; i ++ ){cin >> a[i];if (a[i] == x) pos = i;mp[a[i]] = i;if (a[i] < x) st.insert(i);}int l = 1, r = n + 1;vector<PII> ans;bool flag = false;while (l < r - 1){int mid = l + r >> 1;st.erase(a[mid]);if (a[mid] > x) r = mid;else if (a[mid] <= x){if (a[mid] == x) flag = true;l = mid;}}if (flag){for (auto t : st){int tmp1 = mp[x], tmp2 = t;ans.push_back({tmp1, tmp2});swap(a[tmp1], a[tmp2]);swap(mp[x], t);break;}}if (l != mp[x]) ans.push_back({mp[x], l});cout << ans.size() << '\n';for (auto t : ans) cout << t.first << ' ' << t.second << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t--){solve();}
}

CF 1945F Kirill and Mushrooms

题目链接

比想象的简单,题目意思又理解错

枚举选择了多少个蘑菇

根据贪心的思想,选择蘑菇的大小一定是从大到小的,所以把所有蘑菇放到优先队列里,每次判断队头能不能选,不能选就跳过,能选就选择,并且每次判断之前,先要把p[i - 1]划到不能选的区域,如果之前已经选过了,需要删掉它

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;const int N = 1e5 + 10;
const int mod = 1e9 + 7;
const int maxn = 1e6 + 10;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;void solve()
{int n;cin >> n;vector<int> a(n + 1), p(n + 1);for (int i = 1; i <= n; i ++ ) cin >> a[i];for (int i = 1; i <= n; i ++ ) cin >> p[i];priority_queue<PII> q;for (int i = 1; i <= n; i ++ ) q.push({a[i], i});vector<bool> slt(n + 1), ns(n + 1);int cnt = 0, minn = INF, ans = 0, anscnt;for (int i = 1; i <= n && q.size(); i ++ ){if (i != 0){if (slt[p[i - 1]]){slt[p[i - 1]] = false;cnt -- ;}ns[p[i - 1]] = true;}while (cnt != i && q.size()){auto t = q.top();q.pop();if (ns[t.second]) continue;slt[t.second] = true;minn = min(minn, t.first);cnt ++ ;}if (cnt == i){if (minn * cnt > ans){ans = minn * cnt;anscnt = cnt; }}}cout << ans << ' ' << anscnt << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t--){solve();}
}

CF 1945G Cook and Porridge

题目链接

有点trick的模拟

因为要让所有人都吃上饭,所以我们只要记录一个cur为没有吃上饭的第一个人就可以

我们怎么看他有没有被插队呢,我们用优先队列维护已经吃过饭的人,如果队头的人的优先级比cur以及cur之后所有还没吃饭的人的优先级低,那他就没法插队到cur前面,否则就是队头的人打饭(所以维护一下每个点的后缀最大值)

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;const int N = 1e5 + 10;
const int mod = 1e9 + 7;
const int maxn = 1e6 + 10;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;void solve()
{int n, d;cin >> n >> d;vector<int> k(n + 1), s(n + 1);for (int i = 1; i <= n; i ++ ) cin >> k[i] >> s[i];vector<int> suf(n + 2);for (int i = n; i >= 1; i -- ) suf[i] = max(suf[i + 1], k[i]);priority_queue<array<int, 4>> q;vector<vector<int>> pos(d + 1);int cur = 1; // 第一个还没有吃上饭的for (int i = 0; i < d; i ++ ){if (!q.empty() && q.top()[0] > suf[cur]) // 被插队{auto [k, t, s, idx] = q.top();q.pop();s = -s;if (i + s <= d) pos[i + s].push_back(idx);}else // 没被插队{if (i + s[cur] <= d) pos[i + s[cur]].push_back(cur);cur ++ ;}if (cur == n + 1){cout << i + 1 << '\n';return;}for (auto t : pos[i]) q.push({k[t], -i, -s[t], t});}cout << -1 << '\n';
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t--){solve();}
}

CF 1349B Orac and Medians

题目链接

很蠢的贪心,没想出来想爆锤自己

想到了如果k旁边的一个数大于k,那就可以只选这两个数把另一个数也变成k

所以如果连续的三个数有两个都大于等于k就可以完成

长度为1/2的时候要特判一下

#include <bits/stdc++.h>using namespace std;#define int long long
using i64 = long long;typedef pair<int, int> PII;
typedef pair<int, char> PIC;
typedef pair<double, double> PDD;
typedef pair<int, PII> PIII;
typedef pair<int, pair<int, bool>> PIIB;const int N = 1e5 + 10;
const int mod = 1e9 + 7;
const int maxn = 1e6 + 10;
const int mod1 = 954169327;
const int mod2 = 906097321;
const int INF = 0x3f3f3f3f3f3f3f3f;void solve()
{int n, k;cin >> n >> k;vector<int> a(n);bool flag = false;for (int i = 0; i < n; i ++ ){cin >> a[i];if (a[i] == k) flag = true;}if (!flag){cout << "no\n";return;}if (n == 1){cout << "yes\n";return;}if (n == 2){if (a[0] < k || a[1] < k) cout << "no\n";else cout << "yes\n";return;}int x1 = a[0], x2 = a[1], x3 = a[2], cnt = 0;if (x1 >= k) cnt ++ ;if (x2 >= k) cnt ++ ;if (x3 >= k) cnt ++ ;if (cnt >= 2) flag = false;for (int i = 3; i < n; i ++ ){if (x1 >= k) cnt -- ;x1 = x2, x2 = x3;x3 = a[i];if (x3 >= k) cnt ++ ;if (cnt >= 2) flag = false;}if (flag) cout << "no\n";else cout << "yes\n";
}signed main()
{ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);int t = 1;cin >> t;while (t--){solve();}
}

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

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

相关文章

iPhone语音备忘录误删?掌握这几个技巧轻松恢复【详】

语音备忘录是一款强大的应用程序&#xff0c;它允许用户使用语音输入功能来快速记录想法、提醒、待办事项等。无论是在行进间、工作中还是日常生活中&#xff0c;语音备忘录都是一个非常实用的工具&#xff0c;可以帮助您随时随地记录重要信息&#xff0c;而无需打字或者手动输…

2.windows ubuntu子系统配置

打开UBuntu后&#xff0c; > wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh #下载conda软件。 > bash Miniconda3-latest-Linux-x86_64.sh #下载完conda后执行这步 > source ~/.bashrc > conda-h #出现一下…

redis-黑马点评-商户查询缓存

缓存&#xff1a;cache public Result queryById(Long id) {//根据id在redis中查询数据String s redisTemplate.opsForValue().get(CACHE_SHOP_KEY id);//判断是否存在if (!StrUtil.isBlank(s)) {//将字符串转为bean//存在&#xff0c;直接返回Shop shop JSONUtil.toBean(s, …

laravel(源码笔记)服务绑定和解析(依赖注入-反射,控制反转)

依赖注入&#xff1a;解决对象之间的互相依赖关系&#xff0c;通过反射实现。控制反转&#xff1a;让外部来定义具体行为 反射&#xff08;基本使用&#xff09; reflectionClass getConstructor()getParameters()getConstants()getProperties()getMethods()newInstanceArgs(…

专家解读!IMAP的要点助您在旅途中保持邮件无忧!

你是否经常因会议而出差&#xff0c;需要在各种设备上灵活地访问你的电子邮件&#xff1f;如果是的话&#xff0c;你可能会想了解你的电子邮件系统是如何通过使用互联网消息访问协议&#xff08;IMAP&#xff09;来工作的&#xff0c;这样当你不在办公桌前时&#xff0c;你可以…

_.debounce防抖函数 在vue中使用this问题,应该传匿名函数而不是箭头函数

简单理解&#xff1a;_.debounce内部做了apply操作&#xff0c;箭头函数由于没有this,无法绑定this,导致最终this是undefined, 而匿名函数&#xff0c;成功通过applay绑定了this,所以this指向了vue组件实例。 methods: {// 防抖动dSave1: _.debounce(() > {console.log(thi…

用汇编进行字符串匹配

用汇编进行字符串匹配 2、试编写一程序&#xff0c;要求比较两个字符串 STRING1 和 STRING2 所含字符是否完全相同&#xff0c;若相同则显示 MATCH&#xff0c;若不相同则显示 NO MATCH。 .model small .dataSTRING1 db hello world!,0STRING2 db hello china!,0matchString d…

你知道弧幕影院如何制作吗?其应用领域竟如此广泛!

“沉浸式”作为如今备受热议的内容展示形式&#xff0c;其有着多种可实现的途径&#xff0c;其中弧幕影院作为一项有着独特视觉效果、沉浸式观影体验的技术类型&#xff0c;便是大多数影院、主题公园等娱乐场景的必备设计展项&#xff0c;这种弧幕影院通常使用大型的半圆形屏幕…

React-创建虚拟Dom四种方法

1.声明div const Son1<div>我言秋日胜春招</div> 2.声明函数 function Son() {return <div>自古逢秋多寂寥</div>;} 3.createElement方法 说明&#xff1a;React.createElement: 这是 React 提供的用于创建元素的函数。它接受三个参数&#xff1a…

python 爬取杭州小区挂牌均价

下载chrome驱动 通过chrome浏览器的 设置-帮助-关于Google Chrome 查看你所使用的Chrome版本 驱动可以从这两个地方找: 【推荐】https://storage.googleapis.com/chrome-for-testing-publichttp://npm.taobao.org/mirrors/chromedriver import zipfile import os import r…

leetcode 232.用栈实现队列 JAVA

题目 思路 使用两个栈&#xff08;输入栈和输出栈&#xff09;来模拟一个队列。 队列的push操作实现&#xff1a;直接将元素push到输入栈中。 队列的pop操作实现&#xff1a;队列是先入先出&#xff0c;将输入栈的元素全部pop到输出栈中&#xff0c;然后再由输出栈pop&#…

PMP备考时间、出成绩时间有多久?从在威班培训到拿证我用了60天

尽管PMI官方没有对PMP考试通过分数进行具体规定&#xff0c;能否通过也是看成绩页显示的是“PASS”&#xff08;通过&#xff09;还是“FAIL”&#xff08;未通过&#xff09;&#xff0c;没有成绩的数值体现&#xff0c;但有每个领域的等级可以进行查看&#xff0c;比如下图。…

并网型风光储微电网日前优化调度(MATLAB实现)

考虑了光伏发电、风力发电、电池储能和负荷需求等因素&#xff0c;与主网相连不考虑向主网售电情况。 % 微电网日前优化调度示例代码% 定义时间步长&#xff08;例如&#xff0c;每小时&#xff09; time_steps 24;% 生成模拟数据&#xff1a;光伏发电量&#xff0c;风力发电…

Windows系统服务器宝塔面板打开提示Internal Server Error错误

1、cmd运行bt命令 2、尝试输入16修复程序 3、如果不行&#xff0c;输入17升级程序

STL —— string(1)

目录 1. 模板 1.1 泛型编程 1.2 函数模板 1.2.1 函数模板概念 1.2.2 函数模板格式 1.2.3 函数模板的原理 1.2.4 显式实例化 1.2.5 模板参数的匹配原则 1.3 类模板 1.3.1 类模板定义格式 1.3.2 类模板的实例化 2. STL —— string类 2.1 STL 简介 2.2 标准库中的s…

微服务篇-C 深入理解第一代微服务(SpringCloud)_IV 深入理解Hystrix断路器

原创作者&#xff1a;田超凡&#xff08;程序员田宝宝&#xff09; 版权所有&#xff0c;引用请注明原作者&#xff0c;严禁复制转载 Part 1 理论部分 1 什么是微服务系统中的高可用&#xff1f; 在复杂的大型微服务系统中&#xff0c;高可用相关的技术方案非常重要&#x…

怎样隐藏查询和分组?

发布查询时&#xff0c;遇到信息量较大需要提前制作好&#xff0c;但不用马上发布的查询&#xff0c;该怎样隐藏查询和分组&#xff1f; &#x1f4cc;使用教程 01“开始”和“暂停”查询 如果想要隐藏查询&#xff0c;可以通过点击绿色开始按钮来暂停查询&#xff0c;暂停后的…

C++多态实现原理深度解析

C多态实现原理深度解析 目录 C多态实现原理深度解析 一、引言&#xff1a;多态性的基本概念与重要性 二、虚函数表&#xff08;VTable&#xff09;与虚函数指针&#xff08;VPtr&#xff09; 三、动态绑定与静态绑定 四、纯虚函数与抽象基类 五、继承与多态的关系 六、多…

【软考高项】十五、信息系统工程之系统集成

1、集成基础 定义&#xff1a;通过硬件平台、网络通信平台、数据库平台、工具平台、应用软件平台将各类资源有机、高效地集成到一起&#xff0c;形成一个完整的工作台面 基本原则包括:开放性、结构化、先进性和主流化 2、网络集成 包括&#xff1a;传输子系统、交换子系统、…

调试西门子G120STO模式出现O.F1600等一系列报警

目录 一、现象描述 二、 解决经历 三、结果展示 四、总结 一、现象描述 在调试使用西门子G120的STO功能时&#xff0c;一直无法使用&#xff0c;变频器也一直在报警(RDY灯红灯快闪、SAFE灯黄灯快闪)。在博图上查询发现下面一系列的故障报警。 二、 解决经历 也查询了很多网…