算法训练.

一.奶牛晒衣服

题解:

这应该是个二分题,但是我用的是贪心暴力写的,思想就是循坏每次都让湿度最高的使用一次烘衣机,要是湿度最高的可以在自然条件下都能晒干就结束循环,这样内部我第一想法就是每次都排个降序;但是交上去发现后面数据超时了,也就是每次都排序太麻烦了,于是边思考到每次只需要把刚刚使用过烘衣机过后的湿度在插入进去,就只要一个for循环即可了这样就会快很多;随后也是AC了

代码:

#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip> 
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>
#include<set>
#include <string>using namespace std;using ll = long long;
using ull = unsigned long long;
#define up(i, h, n) for (int  i = h; i <= n; i++) 
#define down(i, h, n) for(int  i = h; i >= n; i--)
#define wh(x) while(x--)
#define node struct node
#define it ::iterator
#define Ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
constexpr int MaxN = 500005;
constexpr int MaxM = 100005;
constexpr int mod = 1e9 + 7;
constexpr int inf = 0x7fffffff;int s[MaxN];
int cmp(int a, int b) {return a > b;
}
int main() {Ios;int n, a, b;cin >> n >> a >> b;up(i, 1, n) {cin >> s[i];}sort(s + 1, s + n + 1, cmp);int ans = 0;while (true) {if (s[1] <= ans * a)break;s[1] -= b;int temp = s[1];int i;for (i = 2; s[i] > temp && i <= n; i++) {s[i - 1] = s[i];}s[i - 1] = temp;ans++;}cout << ans << endl;
}

二.进击的奶牛

题解:

这道题就是经典的二分了,首先这个牛棚得排个序,因为他输入的时候并不是有序输入的,排完序便可以二分了,对于这个二分的条件就是假设当前牛在这个牛棚,那么这头牛与前面那头牛的间距是否大于等于最大的最近距离,最后看牛是否都放入牛棚即可;

代码:

#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip> 
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>
#include<set>
#include <string>
using namespace std;using ll = long long;
using ull = unsigned long long;
#define up(i, h, n) for (int  i = h; i <= n; i++) 
#define down(i, h, n) for(int  i = h; i >= n; i--)
#define wh(x) while(x--)
#define node struct node
#define it ::iterator
#define Ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
constexpr int MaxN = 200005;
constexpr int MaxM = 10005;
constexpr int mod = 1e9 + 7;
constexpr int inf = 0x7fffffff;ll n, m;
ll a[MaxN];bool check(int x) {ll sum = 1;// 初始化为1int k = 0; // 将第一头牛放入up(i, 1, n - 1) {if (a[i] - a[k] >= x) {sum++;k = i;  // 满足要求放入}}return sum >= m; // 牛是否都放进去
}
int main() {Ios;cin >> n >> m;up(i, 0, n - 1) {cin >> a[i];}sort(a, a + n);ll l = 0,r=inf;while (l + 1 < r) {int  mid = (l + r) / 2;if (check(mid)) l = mid ;else r = mid ;}if (check(r)) cout << r << endl;else cout << l << endl;return 0;
}

三.最小生成树

题解:

这道题有两个算法:Kruskal和Prim,我用的是Kruskal,运用结构体将边的起点,终点,权值存起来,按照权值升序排序,建立并查集,并且初始化,随后循环将边加入值并查集,直至n-1即可,也是就五个顶点只需要四条边即可;

代码:

#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip> 
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>
#include<set>
#include <string>
using namespace std;using ll = long long;
using ull = unsigned long long;
#define up(i, h, n) for (int  i = h; i <= n; i++) 
#define down(i, h, n) for(int  i = h; i >= n; i--)
#define wh(x) while(x--)
#define node struct node
#define it ::iterator
#define Ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
constexpr int MaxN = 50005;
constexpr int MaxM = 200005;
constexpr int mod = 1e9 + 7;
constexpr int inf = 0x7fffffff;node{int x,y,z;
};
node a[MaxM];
int cmp(node a, node b) {return a.z < b.z;
}
int f[MaxN];int find(int x) {return f[x] == x ? x : f[x] = find(f[x]);
}
int main() {Ios;int n, m;cin >> n >> m;up(i, 1, n) f[i] = i;up(i, 1, m) {cin >> a[i].x >> a[i].y >> a[i].z;}sort(a + 1, a + m + 1, cmp);int ans = 0;int num = 0;up(i, 1, m) {if (find(a[i].x) != find(a[i].y)) {f[find(a[i].y)] = f[a[i].x];ans += a[i].z;num++;}if (num == n - 1) {break;}}if (num == n - 1) cout << ans << endl;else cout << "orz" << endl;return 0;
}

四.Minimum Glutton

题意:给你N盘菜肴,每盘菜肴有甜度和咸度两个属性;你可以将这些菜肴给他们任意排序,然后按顺序吃掉,但是当甜度超过X或者咸度超过Y时,就不能吃了;

题解:

题目要求的事最少吃几盘,那就将咸度和甜度两个都排降序,然后看两个分别能吃多少盘,然后取两个当中的min即可;

代码:

#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip> 
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>
#include<set>
#include <string>
using namespace std;using ll = long long;
using ull = unsigned long long;
#define up(i, h, n) for (int  i = h; i <= n; i++) 
#define down(i, h, n) for(int  i = h; i >= n; i--)
#define wh(x) while(x--)
#define node struct node
#define it ::iterator
#define Ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
constexpr int MaxN = 200005;
constexpr int MaxM = 10005;
constexpr int mod = 1e9 + 7;
constexpr int inf = 0x7fffffff;ll  x, y;
int n;
int cmp(int a, int b) {return a > b;
}
int main() {Ios;cin >> n >> x >> y;vector< int> a(n);vector< int> b(n);up(i, 0, n - 1) {cin >> a[i];}up(i, 0, n - 1) {cin >> b[i];}sort(a.begin(), a.end(),cmp);sort(b.begin(), b.end(), cmp);int ans = n;up(i, 0, n - 1) {x -= a[i];if (x < 0) {ans = min(ans, i + 1);break;}}up(i, 0, n - 1) {y -= b[i];if (y < 0) {ans = min(ans, i + 1);break;}}cout << ans << endl;return 0;
}

五.Grid Walk

题意:给你一个长为H,宽为W的一张图,然后图中有若干个障碍物,人物不能穿过障碍物和边界;给你起始位置,和一些指令,求经过这些指令后人物的位置;

题解:

简单的模拟题,就是L是左,R是右,U是上,D是下,模拟判断是否为边界和障碍物即可,若是到了边界或者障碍物就不动,否则就动;

代码:

#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip> 
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>
#include<set>
#include <string>
using namespace std;using ll = long long;
using ull = unsigned long long;
#define up(i, h, n) for (int  i = h; i <= n; i++) 
#define down(i, h, n) for(int  i = h; i >= n; i--)
#define wh(x) while(x--)
#define node struct node
#define it ::iterator
#define Ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
constexpr int MaxN = 200005;
constexpr int MaxM = 10005;
constexpr int mod = 1e9 + 7;
constexpr int inf = 0x7fffffff;int H, W;
int x, y;int main() {Ios;cin >> H >> W;cin >> x >> y;x--; y--;vector<string> a(H);up(i, 0, H-1) {cin >> a[i];}string s;cin >> s;for (auto c : s) {if (c == 'L' && y - 1 >= 0 && a[x][y - 1] != '#') {y--;}if (c == 'R' && y + 1 < W && a[x][y + 1] != '#') {y++;}if (c == 'U' && x - 1 >= 0 && a[x - 1][y] != '#') {x--;}if (c == 'D' && x + 1 < H && a[x + 1][y] != '#') {x++;}}cout << x + 1 << ' ' << y + 1 << endl;return 0;
}

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

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

相关文章

windows下在线预览服务kkFileView4.4.0问题记录

前几天找到一个开源项目&#xff1a;kkFileView&#xff0c;感觉可能以后可能会用到&#xff0c;所以尝试了下。 通过git下载下来&#xff0c;版本是4.4.0&#xff0c;通过idea打开项目&#xff0c;发现老是无法找到组件aspose-cad&#xff0c;版本是23.9. 找了好多文章&#x…

AI学习(1)软件的选择,cuda和pytorch的安装

文章目录 1.使用VScode开发&#xff0c;结合anaconda配置python环境2.安装pytorch库3.深度学习相关的库1.numpy&#xff08;科学计算库&#xff09;2.pandas(数据分析处理库)3.matplotlib&#xff08;可视化库&#xff09;4.seaborn&#xff08;可视化库&#xff09; 1.使用VSc…

Docker三大基础组件

Docker有三个重要的概念&#xff1a;仓库、镜像和容器 &#xff0c;它们是Docker的三大基础组件&#xff0c;这三个组件共同构成了Docker的核心架构&#xff0c;使得Docker能够实现对应用程序的便捷打包、分发和运行。 Docker使用客户端-服务器体系结构。Docker客户端与Docker守…

安装jdk和tomcat

安装nodejs 1.安装nodejs&#xff0c;这是一个jdk一样的软件运行环境 yum -y list installed|grep epel yum -y install nodejs node -v 2.下载对应的nodejs软件npm yum -y install npm npm -v npm set config .....淘宝镜像 3.安装vue/cli command line interface 命令行接…

【Qt】QDateTimeEdit

在Qt中&#xff0c;QDateEdit是用于选择日期的微调框&#xff0c;QTimeEdit是用于选择小时和分钟的微调框 QDateTimeEdit则是基于QDateEdit和QTimeEdit的组合控件&#xff0c;能够同时显示日期和时间&#xff0c;并允许用户以交互方式编辑日期 常用属性 属性说明dateTime时间…

SpringBoot SseEmitter,服务器单项消息推送

防止推送消息乱码 import org.jetbrains.annotations.NotNull; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.servlet.mvc.method…

每日OJ_牛客HJ74 参数解析

目录 牛客HJ74 参数解析 解析代码1 解析代码2 牛客HJ74 参数解析 参数解析_牛客题霸_牛客网 解析代码1 本题通过以空格和双引号为间隔&#xff0c;统计参数个数。对于双引号&#xff0c;通过添加flag&#xff0c;保证双引号中的空格被输出。 #include <iostream> #i…

Ubuntu20.04安装Angular CLI

一、更换apt-get源 使用原来的apt-get源有几个包报错&#xff0c;下不下来 更换阿里源&#xff08;阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区&#xff09;&#xff0c;使用网站中的内容&#xff0c;在 apt-get update 时总是报错 改用清华源&#xff1a; deb http:/…

学习日记:二维数组

目录 1. 定义 2. 初始化 3. 数组元素的引用 4. 二维字符型数组 4.1 初始化 1. 定义 C语言中并不存在真正的二维数组&#xff1b; 二维数组的本质&#xff1a;一维数组类型的一维数组。 二维数组数据存储时按行优先存储。 语法&#xff1a; 类型说明符 数组名 [常量表达…

java单链表;双向链表;双向循环链表——简单应用

一、链表(Linked List)介绍 链表是有序的列表&#xff0c;但是它在内存中是存储如下 链表是以节点的方式来存储,是链式存储每个节点包含 data 域&#xff0c; next 域&#xff1a;指向下一个节点.如图&#xff1a;发现链表的各个节点不一定是连续存储.链表分带头节点的链表和没…

LLM实战系列(1)—强强联合Langchain-Vicuna应用实战

背景 本文主要介绍一下&#xff0c;基于Langchain与Vicuna-13B的外挂OceanBase知识库项目实战以及QA使用&#xff0c;项目地址: github.com/csunny/DB-G… 在开始之前&#xff0c;我们还是先看看效果&#xff5e; 自Meta发布LLaMA大模型以来&#xff0c; 围绕LLaMA微调的模型…

基于PHP+MySQL组合开发的微信活动投票小程序源码系统 带完整的安装代码包以及搭建部署教程

系统概述 在当今数字化时代&#xff0c;微信作为社交媒体的巨头&#xff0c;为企业和个人提供了丰富的互动营销平台。其中&#xff0c;投票活动作为一种有效的用户参与和互动方式&#xff0c;被广泛应用于各种场景。为了满足这一需求&#xff0c;我们推出了一款基于PHPMySQL组…

W1R3S靶机全通详细教程

文章目录 w1r3s主机发现主机扫描 端口扫描tcp端口扫描UDP扫描漏洞扫描 攻击面分析FTP渗透匿名登录 web渗透目录爆破 cuppa cms文件包含漏洞getshell提权 w1r3s 引言 近些日子看红笔大佬的靶机精讲视频时&#xff0c;他的一句话让我感受颇深&#xff0c;很多视频在讲解时&…

数据结构:线性表(下)

那么这篇就来总结一下栈和队列 一、栈 栈 (Stack) 只允许在有序的线性数据集合的一端&#xff08;称为栈顶 top&#xff09;进行加入数据&#xff08;push&#xff09;和移除数据&#xff08;pop&#xff09;。因而按照 后进先出&#xff08;LIFO, Last In First Out&#xf…

好用的抠图小技巧

在ps里的抠图方法 方法一&#xff1a;直接在菜单栏里选择主体&#xff0c;选中主体后会出现蚂蚁线&#xff0c;这个时候可能选区还不够完整&#xff0c;需要借助快速选择工具细化选取&#xff0c;选好之后按ctrlj复制选区就抠好啦 方法二&#xff1a;用快速选择工具直接选取人…

浏览器指纹技术:如何更改浏览器指纹?

“指纹信息”是一个人独有的身份象征&#xff0c;而“浏览器指纹”&#xff0c;就是网站和在线平台使用浏览器指纹来收集有关您的浏览器、设备和网络的详细信息&#xff0c;它可以说是你上网的身份象征&#xff0c;可让网站跟踪您的在线行为。 下面我们简单科普浏览器指纹的工…

【Python体验】第五天:目录搜索、数据爬虫(评论区里写作业)

文章目录 目录搜索 os、shutil库数据爬虫 request、re作业&#xff1a;爬取案例的top250电影的关键信息&#xff08;名称、类型、日期&#xff09;&#xff0c;并保存在表格中 目录搜索 os、shutil库 os 模块提供了非常丰富的方法用来处理文件和目录。 os.listdir(path)&#x…

C语言| 文件操作详解(二)

目录 四、有关文件的随机读写函数 4.1 fseek 4.2 ftell 4.3 rewind 五、判定文件读取结束的标准与读写文件中途发生错误的解决办法 5.1 判定文件读取结束的标准 5.2 函数ferror与feof 5.2.1 函数ferror 5.2.2 函数feof 在上一章中&#xff0c;我们主要介绍了文件类型…