当前位置: 首页 > news >正文

算法训练.

一.扩散

题解:

计算点之间的距离,然后对图进行处理即可,这个数据规模较小,因此我使用了floyd,还有最小生成树和二份答案加并查集的写法;

代码:

#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip> 
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>
#include<set>
#include <string>
#include<map>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;
constexpr double value = 1e-10;int main() {int n;int x[55], y[55];int e[55][55];cin >> n;up(i, 1, n) {cin >> x[i] >> y[i];}up(i, 1, n) {up(j, 1, n) {e[i][j] = abs(x[i] - x[j]) + abs(y[i] - y[j]);}}up(k, 1, n) {up(i, 1, n) {up(j, 1, n) {e[i][j] = min(max(e[i][k], e[k][j]), e[i][j]);}}}int ans = 0;up(i, 1, n) {up(j, 1, n) {ans = max(ans, e[i][j]);}}cout << int(ceil(ans * 1.0 / 2));return 0;
}

二.三分 函数

题解:

三分模版,三分和二分的原理相同,不同的是,三分对于已知的l和r,会有两个三等分点的值mid;不过这里值得注意的是一些差值,需要误差很小;

代码:

#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip> 
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>
#include<set>
#include <string>
#include<map>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 = 10005;
constexpr int MaxM = 10005;
constexpr int mod = 1e9 + 7;
constexpr int inf = 0x7fffffff;
constexpr double value = 1e-10;node{double a,b,c;
}e[MaxN];
int t, n;double check(double x) {double max1 = e[0].a * x * x + e[0].b * x + e[0].c;up(i, 1, n - 1) {max1 = max(e[i].a * x * x + e[i].b * x + e[i].c, max1);}return max1;
}void slove() {cin >> n;up(i, 0, n - 1) {cin >> e[i].a >> e[i].b >> e[i].c;}double l = 0, r = 1000;while (r-l>value) {double mid1 = l + (r - l) / 3.0;double mid2 = r - (r - l) / 3.0;if (check(mid1) < check(mid2)) r = mid2;else l = mid1;}printf("%.4lf\n", check(l));//cout << fixed << setprecision(4) << check(l);
}
int main() {Ios;cin >> t;while (t--) {slove();}
}

三.Queue Sort

题意:

你需要用一种特殊的排序方法对一个长为 n 的数组进行操作。每次操作,你将 a1​ 放在数组中最后一个小于等于它的元素后面(没有就不动)。求这种排序方法是否可以使得数组升序排列?

题解:

当 a1​ 为原始数组中最后一个最小的数时,题目中的操作变得无意义。而此时数组是否升序,取决于原始数组最后一个最小值后的元素是否升序;原始数组最后一个最小值后的元素升序时操作数为这个元素的下标减一,否则无解;

代码:

#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip> 
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>
#include<set>
#include <string>
#include<map>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;
constexpr double value = 1e-10;int a[MaxN];
void slove() {int n;cin >> n;int mins = 2e9;int ans;bool flag = true;up(i, 1, n) {cin >> a[i];if (mins > a[i]) {mins = a[i];ans = i;}}up(i, ans + 1, n - 1) {if (a[i] > a[i + 1]) flag = false;}if (flag)cout << ans - 1 << endl;else cout << -1 << endl;
}int main() {Ios;int t;cin >> t;while (t--) {slove();}
}

四.Querying Multiset

题意:

给定一个集合和 Q 次操作,每个操作可能是以下操作之一:

  • 第一个操作给定整数 x,表示将 x 放入集合。

  • 第二个操作给定整数 x,表示将集合的数分别加上 x。

  • 第三个操作将集合最小的数删除。

对于每个第三个操作,输出你删去的数。

题解:

这几个操作主要是操作二,把根里面的每一个元素遍历更新显然不符合时间复杂度要求,考虑如何把操作二变为单点修改;所以我们不难想到,用一个值 ans来表示当前的增加量,这样操作二可以解决;在这种情况下:对于操作一,把 ans 看作后面插入元素所需的减少量,那么插入的数字 x 可以用 q.push(x-ans) 来代替;对于操作三,只需要输出堆里最小元素加上 ans 的值即可;

代码:

#include <iostream>
#include <cstring>
#include <cmath>
#include <iomanip> 
#include <algorithm>
#include <cstdio>
#include <stack>
#include <queue>
#include<set>
#include <string>
#include<map>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;
constexpr double value = 1e-10;ll ans;
priority_queue<long, vector <long>, greater<long>>q;void slove() {int n;cin >> n;if (n == 1) {ll x;cin >> x;q.push(x-ans);}else if (n == 2) {ll x;cin >> x;ans += x;}else {cout << q.top() + ans << endl;q.pop();}
}
int main() {int t;cin >> t;while (t--) {slove();}return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 什么是 PPA?详解 Ubuntu 软件安装的强大工具
  • 38.【C语言】指针(重难点)(C)
  • 【密码学】密码协议的安全性
  • EasyExcel 自定义转换器、自定义导出字典映射替换、满足条件内容增加样式,完整代码+详细注释说明
  • 香港网站服务器抵御恶意攻击的一些措施
  • 先进制造aps专题二十四 云平台排产aps的方案设计
  • 【实战】MFC客户端Python后端之仿造QQ聊天
  • C++初阶--命名空间、输入输出、缺省函数、函数重载、引用
  • Java设计模式(桥接模式)
  • MySQL笔记-基础篇(二):多表查询
  • XetHub 加入 Hugging Face!
  • 基于OpenMV与STM32的数据通信项目(代码开源)
  • 鸿蒙HarmonyOS开发:常用布局及实用技巧
  • MYSQL必知必会 - (一)了解sql + (二)MySQL简介
  • 《RT-DETR》论文笔记
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • echarts的各种常用效果展示
  • ES6系统学习----从Apollo Client看解构赋值
  • JavaWeb(学习笔记二)
  • pdf文件如何在线转换为jpg图片
  • Python语法速览与机器学习开发环境搭建
  • Yii源码解读-服务定位器(Service Locator)
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 入门到放弃node系列之Hello Word篇
  • 使用agvtool更改app version/build
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 微信开放平台全网发布【失败】的几点排查方法
  • 7行Python代码的人脸识别
  • 移动端高清、多屏适配方案
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • (0)Nginx 功能特性
  • (175)FPGA门控时钟技术
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (4.10~4.16)
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (蓝桥杯每日一题)love
  • (三)SvelteKit教程:layout 文件
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • .axf 转化 .bin文件 的方法
  • .cn根服务器被攻击之后
  • .net打印*三角形
  • .net反编译工具
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .Net下的签名与混淆
  • .net知识和学习方法系列(二十一)CLR-枚举
  • ::什么意思
  • @Async注解的坑,小心
  • @ComponentScan比较
  • @RunWith注解作用
  • @Slf4j idea标红Cannot resolve symbol ‘log‘
  • @Valid和@NotNull字段校验使用
  • [ACM] hdu 1201 18岁生日