algorithm——sort(eg.The Dragon of Loowater)

2023-12-28 14:38

本文主要是介绍algorithm——sort(eg.The Dragon of Loowater),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

algorithm 中 sort函数(快排实现,时间复杂度 O(nlogn)):
sort函数:sort(first,end,method)//其中第三个参数为可选参数。
参数含义:
first:需要排序数组的起始位置
end:终止位置
method:是一个方法,用来决定sort函数的排序方式

1.当只有两个参数时,则默认排序为从小到大
(应用见例题)
2.当有3个参数时,则要实现method方法。

eg.
# include <iostream>
# include <algorithm>
using namespace std;*bool method(int a , int b){   //实现从大到小排序return a>b;
}*int main(){int A[6] = {3, 5, 9 , 1 ,-3 ,18};sort(A,A+6,method);for(int i = 0 ; i < 6 ; i++)cout<<A[i]<<" ";return 0;
}

例题:有一条n个头的恶龙以及m个骑士,一个能力值为x的骑士可以被雇佣来砍掉恶龙一个直径不超过x的头,且需要支付x个金币。如何雇佣骑士才能砍掉恶龙所有的头,且需要支付的金币最少?注意,一个骑士只能砍掉一个头,且不能被重复雇佣。

[输入格式]
输入包含多组数据。第一行为正整数n和m(1<=n,m<=20000);一下n行每行为一个整数,即恶龙头的直径;以下m行每行一个正整数,即每个骑士的能力值。输入结束的标志为n=m=0。

[输出格式]
对于每组数据,输出最少的花费。如果无解,输出”Loowater is doomed!”。

[样例输入]
2 3
5
4
7
8
4
2 1
5
5
10
0 0

[样例输出]
11
Loowater is doomed!

C++代码:

# include <iostream>
# include <algorithm>
using namespace std;int main(){int n,m,*dragon,*loowater;while(cin>>n>>m){dragon = new int[n];loowater = new int[m];for(int i = 0 ; i < n ; i ++)cin>>dragon[i];for(int i = 0 ; i < m ; i ++)cin>>loowater[i];sort(dragon,dragon+n);sort(loowater,loowater+m);int cur = 0;int cost = 0;for(int i = 0 ; i < m ; i ++){if(loowater[i] >= dragon[cur]){cost = cost + loowater[i];if(++cur == n)break;}}if(cur < n)cout<<"Loowater is doomed!"<<endl;elsecout<<cost<<endl;}
}

这篇关于algorithm——sort(eg.The Dragon of Loowater)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/546292

相关文章

usaco 1.3 Mixing Milk (结构体排序 qsort) and hdu 2020(sort)

到了这题学会了结构体排序 于是回去修改了 1.2 milking cows 的算法~ 结构体排序核心: 1.结构体定义 struct Milk{int price;int milks;}milk[5000]; 2.自定义的比较函数,若返回值为正,qsort 函数判定a>b ;为负,a<b;为0,a==b; int milkcmp(const void *va,c

stl的sort和手写快排的运行效率哪个比较高?

STL的sort必然要比你自己写的快排要快,因为你自己手写一个这么复杂的sort,那就太闲了。STL的sort是尽量让复杂度维持在O(N log N)的,因此就有了各种的Hybrid sort algorithm。 题主你提到的先quicksort到一定深度之后就转为heapsort,这种是introsort。 每种STL实现使用的算法各有不同,GNU Standard C++ Lib

【tensorflow 使用错误】tensorflow2.0 过程中出现 Error : Failed to get convolution algorithm

如果在使用 tensorflow 过程中出现 Error : Failed to get convolution algorithm ,这是因为显卡内存被耗尽了。 解决办法: 在代码的开头加入如下两句,动态分配显存 physical_device = tf.config.experimental.list_physical_devices("GPU")tf.config.experiment

C/C++经典排序问题,sort函数使用

目录 1. 前言 2. 正文 2.1 问题 2.2 解决办法 2.2.1 思路 2.2.2 代码实现 2.2.3 测试结果 3. 备注 1. 前言 大家在学习C语言的时候,是不是经常被排序算法折磨的很难那首,其实都是但是在C++中有专门的,排序函数,而且支持自定义排序算法。下面我就带大家看看,sort函数简单的数组排序中的应用。 2. 正文 2.1 问题 题目描述

Hive中order by,sort by,distribute by,cluster by的区别

一:order by order by会对输入做全局排序,因此只有一个Reducer(多个Reducer无法保证全局有序),然而只有一个Reducer,会导致当输入规模较大时,消耗较长的计算时间。关于order by的详细介绍请参考这篇文章:Hive Order by操作。 二:sort by sort by不是全局排序,其在数据进入reducer前完成排序,因此,如果用sort

list.sort实现根据对象的属性值对集合进行排序

list.sort实现根据对象的属性值对集合进行排序,如下所示List<Map<String,Object>> list = new ArrayList<>();Map<String,Object> map1 = new HashMap<>();map1.put("gz_id",1);map1.put("aaa","aaa");Map<String,Object> map2 = new H

HDU 1890 Robotic Sort

题意: 将一列数字排序  排序规则是  每次找到最小值的位置loc  将1~loc所有数字颠倒  然后删掉第一位  直到排好序  排序要求是稳定的 思路: 这题要做的是  寻找区间最小值位置  翻转区间  的操作  因此可以想到用splay 只需要每个节点记录一个small  就可以实现找到最小值位置 翻转区间操作就是将splay的超级头转到最上面使之成为根  再把loc转到根下面

Go-Sort(Cont)

倒序。 package mainimport ("fmt""sort")func main() {data := []string{"one", "two", "three", "four"}sort.Strings(data)fmt.Println(data) //[four one three two]sort.Sort(sort.Reverse(sort.StringSlice(data

sort对二维字符数组排序

转载自(http://blog.csdn.net/unimen/article/details/6843977) 由于二维字符数组的第二维没有赋值运算符,即不能对整个一维数组进行赋值,因此是无法直接对二维数组用sort进行排序的,解决办法有二种: 代码一: #include <iostream> #include <cstring> #include <algorithm> usin

Insertion Sort Integer Array Insertion Sort Linked List

Sort Integer Array using Insertion sort. //********************************************************************************************************/* Insertion Sort 原理:就是前面的sort部分全部是相对值,从后面拿一个元素,然后跟