是时候学一波STL了。。。

都到如今了还不会STL,赶紧学习一下。

。。

头文件#include<algorithm>

加上 using namespace std。

求下一个排列的函数:next_permutation(first,last),当中first,last都是指针变量。求的是区间

[first。last)的下一个排列。升序求得。比若说1 2 3 下一个排列是1 3 2。最后一个排列的下一个排列是第

一个。即3 2 1——>1 2 3。据说效率也不怎么样,poj 1833用G++交TLE。C++过了.

假设当前是最后一个排列,则next_permutation(first,last)会返回false。

。。

实现原理:

在当前序列中,从尾端往前寻找两个相邻元素。前一个记为*i,后一个记为*ii。而且满足*i < *ii。

然后再从尾

端寻找还有一个元素*j,假设满足*i < *j,即将第i个元素与第j个元素对调,并将第ii个元素之后(包含ii)的所

有元素颠倒排序,即求出下一个序列了。

prev_permutation(first,last)是求的前一个排列。。。

id=1833">poj 1833

代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int a[1025];
int main()
{
	int T,m,n;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d",&m,&n);
		for(int i=0; i<m; i++)
		{
			scanf("%d",&a[i]);
		}
		int *first = a;
		int *last = a+m;
		while(n--)
		{
			next_permutation(first,last);
		}
		for(int i=0; i<m; i++)
		{
			printf("%d",a[i]);
			if(i!=m-1)
			{
				printf(" ");
			}
		}
		puts("");
	}
	return 0;
}

id=1731">poj 1731

样例。用来练手。。。

代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;

int cmp(const void *a,const void *b)
{
	return *(char *)a-*(char *)b;
}
int main()
{
	char a[205];
	scanf("%s",a);
	int len = strlen(a);
	qsort(a,len,sizeof(a[0]),cmp);
	char *sta = a;
	char *end = a+len;
	puts(a);
	while(next_permutation(sta,end))
	{
		puts(a);
	}
	return 0;
} 
时间: 2024-08-14 02:21:21

是时候学一波STL了。。。的相关文章

百度之星题--斐波拉契数列

题目: du熊学斐波那契I Time Limit : 2000/1000ms (C/Other) Memory Limit : 65535/32768K (C/Other) 本次组委会推荐使用C.C++ Problem Description du熊对数学一直都非常感兴趣.最近在学习斐波那契数列的它,向你展示了一个数字串,它称之为"斐波那契"串: 11235813471123581347112358........ 聪明的你当然一眼就看出了这个串是这么构造的:1.先写下两位在0~9范围

STL初探

关于algorithm的一些东西 感言: 学C++不学STL函数库的人可能都是... 有点问题 头文件<algorithm>的一些东西 sort,快排: 这是个初学者必需掌握的东西,及其好用,因为方(lan)便(duo). sort(a+1,a+1+n);是最基本的,你还可以根据这个随意改变数组名称,区间范围(只要确定你需要排序数组的开头和结尾的数组的代号) #include<iostream> #include<algorithm> using namespace s

2019年年终面试经历总结(含解析答案、推荐书籍、资料分享)

书籍推荐c++ : <effictive C++>.<SGI STL源码解析>(侯捷).<effictive STL>.<深入探索C++对象模型>.<c++ primer>等 网络:<计算机网络>.<图解tcp/ip> .<tcp/ip详解>.<UNIX 网络编程>(想进腾讯的小伙伴最好看看这个) 操作系统:<深入理解计算机系统>.<操作系统-精髓与设计原理>.<UNI

20145235,20145225实验三

安装GIT与配置 实验过程: 因为之前队友用Git上传了项目及代码,所以我先用Git把队友的项目克隆下来,然后在进行修改添加. 在他的项目里添加一个HelloWorld.java文件并标注"shiyansan"然后上传上去. 结果显示:上传成功 实验感想 虽然博客很短,但是背后所花费的时间确实非常多,首先不清楚Git到底是干什么的,也不知道用Git和学Java有什么关系?在配置Git的时候,出现了很多问题,英语太差了(是时候要学一波英语了).不知道问题出在哪里?在请教同学之后,我解决了

暑期集训7/16

---恢复内容开始--- A题: 题目要求:求一个环,满足相邻的节点的和为素数,都是一开始 思路:深搜dfs,只到位数等于要求的位数,然后输出,接着回溯,只到所以情况都出来 代码: #include <stdio.h> #include <iostream> #include <string.h> #include <algorithm> #include <string> #include <queue> #include <

7月20日

感觉这两天没学到啥,昨天停电然后无限火力去了.ps:火锅好好吃呀o(* ̄▽ ̄*)ブ 今天做了场个人赛,最近个人赛真的好多啊,做着真的好累啊. 感觉自己不好集中精神去学一样东西,难道是大学发散惯了?唉,真不是个好习惯. 又要补题,不补题就是条废狗了. 明天要做的list: a.把个人赛第五场的d.f补了 b.把个人赛第四场的d补了,学一小波树形dp c.把hash.kmp.字典树给大概了解下 加油(? ?_?)?明天不划水

puppet安装配置(一)

之前搞了一个月zabbix,基本上是能熟练使用了,不过在后来部署的时候发现这玩意在部署的时候机子少还行,机子多了手动安装手会残的.第一反应是用puppet,后来师父直接用puppet搞定了.索性自己也学一波,毕竟这是自动化运维大势所趋,必备技能啊. 下载链接见http://www.cnblogs.com/weijing24/p/5714850.html puppet是c/s结构,有一个服务端和很多客户端.一般运行模式是客户端从服务端拉取指令然后执行.puppet很纠结的一个地方是版本不同导致的命

2012高校GIS论坛

江苏省会议中心 南京·钟山宾馆(2012年4月21-22日) 以"突破与提升"为主题的"2012高校GIS论坛"将于4月在南京举行,由南京大学和工程中心共同承办.高校GIS论坛每两年举办一次,已在北京九华山庄成功举办三届,现已发展成为国内高校GIS教育界最有权威,最具影响力的高端论坛. 赛迪网直播小组正在现场进行图文.微博直播——2012高校GIS论坛! 主持人:尊敬的李院长.曹省长.陈校长,“突破与提升2012高校GIS论坛”现在开幕!首先请允许我介绍出席今天开幕

跳跃版图

题目:跳跃版图 题目描述 有一个 n×n 的格子,每个格子中有一个非负整数.你的目标是从左上角跳到右下角,每步只能向右或向下跳.格子中的数代表从该格开始跳跃的前进步数,如果某次跳跃会跃出格子界限则该跳跃是禁止的.注意 0 是一个绝对终点,因为从这里无法再移动. 你的任务是统计有多少种合法路径.上图 1 中共有 3 种路径,分别表示在图 2 中. 输入说明 第一行,一个整数 n. 接下来 n 行 n 列,表示格子中的数,所有数的范围在[0,9]中,两个数之间用一个空格隔开. 输出说明 第一行,从左