令人兴奋的STL来了!!!

Start

说到STL,可能会比较陌生。

但是!说到sortabsstring,懒人俱乐部的终身会员会起身夸赞。

没错,上述即为STL的一部分。

(以下内容均摘自百度百科)

STL是Standard Template Library的简称,中文名标准模板库,惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL是C++的一部分,因此不用安装额外的库文件。

我承认我也看不大懂,总体大概就是说,这是c++内置函数。

分为容器算法模板

容器:

可以看成是数组的拓展,STL出现了向量(vector),栈(stack),队列(queue),优先队列(priority_queue),链表(list),集合(set),映射(map)等容器。

算法:

对一些编程中常用的算法,STL提供了通用的函数供程序员直接调用。比如遍历(for_each),查找(find),二分查找(binary_search、lower_bound、upper_bound)去除重复(unique),填充(fill),前一个排列(pre_permutation),下一个排列(next_permutation),排序(sort)等。

模板:

我们以前编写的函数中,参数的类型都是确定的,这个特点极大限制了函数的通用性。比如C语言中求一个数的绝对值函数,整数是abs,长整数是labs,浮点数是Fabs。STL中使用模板技术,统一为abs函数。

为大家提供一个表格:

令人兴奋的STL来了!!!_第1张图片

令人兴奋的STL来了!!!_第2张图片

题目描述

FarmerJohn想修理牧场栅栏的某些小段。为此,他需要N(1<=N<=20,000)块特定长度的木板,第i块木板的长度为Li(1<=Li<=50,000)。然后,FJ去买了一块很长的木板,它的长度正好等于所有需要的木板的长度和。接下来的工作,当然是把它锯成需要的长度。FJ忽略所有切割时的损失——你也应当忽略它。
FJ郁闷地发现,他并没有锯子来把这块长木板锯开。于是他把这块长木板带到了Farmer Don的农场,想向FD借用锯子。
作为一个有商业头脑的资本家,FarmerDon没有把锯子借给FJ,而是决定帮FJ锯好所有木板,当然FJ得为此付出一笔钱。锯开一块木板的费用,正比于木板的长度。如果这块木板的长度是21,那么锯开它的花费便是21美分。
谈妥条件后,FD让FJ决定切割木板的顺序,以及每次切割的位置。请你帮FJ写一个程序,计算为了锯出他想要的木板,他最少要花多少钱。很显然,按不同的切割顺序来切开木板,FJ的总花费可能不同,因为不同的切割顺序,会产生不同的中间结果。

输入格式

第1行: 一个正整数N,表示FJ需要木板的总数。
第2…N+1行: 每行包含一个整数,为FJ需要的某块木板的长度 。

输出格式

第1行: 输出一个整数,即FJ完成对木板的N-1次切割的最小花费 。

样例数据

input

3
8
5
8

说明:

FJ打算把一块长为21的木板切成长度分别为8,5,8的三段。

output

34

说明:

起初,木板的长度为21。第一次切割木板花费21美分,把木板切成长分别为13和8的两块。然后花费13美分把长为13的木板切成长为8和5的两块。这样的总花费是21+13=34美分。如果第一次把木板切成长为16和5的两块,那么第二次切木板的花费就是16美分,这样的总花费就是37美分,比刚才花费34美分的方案来的差。

数据规模与约定

时间限制:1s

空间限制:256MB

题解如下:

#include
using namespace std;
priority_queue<int,vector<int>,greater<int> > q;
long long n,sum=0,ans=0,a,b;
int main()
{
	freopen("plank.in","r",stdin);
	freopen("plank.out","w",stdout);
	cin>>n;
	while(n--)
	{
		cin>>a;
		q.push(a);
	}
	while(q.size()>=2)
	{
		a=q.top();
		q.pop();
		b=q.top();
		q.pop();
		sum=a+b;
		ans+=sum;
		q.push(sum);
	}
	cout<<ans;
	return 0;
}

注:数据一定要开long long

Finally

代码实现会很短,可里面有不少我们想用就一定要背的东西。
懒就要懒下去,背了用,更省事了。

你可能感兴趣的:(c++,stl)