是时候学一波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)是求的前一个排列。。。
代码:
#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;
}
样例。用来练手。。。
代码:
#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;
}
是时候学一波STL了。。。的更多相关文章
- hdu 2072 1106学一波字符串分割,C语言与C++两种方法
hdu2072:题意:输出给定字符串中的单词数(一个句子中可能有两个相同的单词),这里的思想是把每个单词取出来,放入set(这个集合容器中不允许有相同的元素)中,最后输出该集合的大小即可. 现在的问题 ...
- [转贴]从零开始学C++之STL(一):STL六大组件简介
一.STL简介 (一).泛型程序设计 泛型编程(generic programming) 将程序写得尽可能通用 将算法从数据结构中抽象出来,成为通用的 C++的模板为泛型程序设计奠定了关键的基础 (二 ...
- [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)
首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code 1 2 template < class _Ty, cl ...
- 从零开始学C++之STL(七):剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)
一.移除性算法 (remove) C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...
- 从零开始学C++之STL(四):算法简介、7种算法分类
一.算法 算法是以函数模板的形式实现的.常用的算法涉及到比较.交换.查找.搜索.复制.修改.移除.反转.排序.合并等等. 算法并非容器类型的成员函数,而是一些全局函数,要与迭代器一起搭配使用. 算法的 ...
- [置顶] 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)
首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下: C++ Code 1 2 template < class _Ty, ...
- Educational Codeforces Round 34 B. The Modcrab【模拟/STL】
B. The Modcrab time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- AOJ.720 丢失的学妹
缺失的学妹 考察点 STL MAP Time Mem Len Lang 3.81s 39.1MB 0.68K G++ 题意分析 给出妹子学号的个数n,给出n个学号,和n-1个学号,求在n学号中那个没有 ...
- STL初探
关于STL的一些东西 感言: 学C++不学STL函数库的人可能都是... 有点问题 头文件<algorithm>的一些东西 sort,快排: 这是个初学者必需掌握的东西,及其好用,因为方( ...
随机推荐
- [using_microsoft_infopath_2010]Chapter3 表单设计基础:使用InfoPath布局,控件,和视图
本章概要 1.使用InfoPath的布局工具构建吸引人的表单 2.使用InfoPath表格工具 3.在表单上添加字段和控件 4.使用section和container组织表单里的控件 5.在一个表单上 ...
- POJ 3696
这里面的一个转换的小技巧很重要,把888...8转换成(10^x-1)/9*8.神来之笔,佩服. 这样有(10^x-1)/9*8=L*p得10^x-1=L*p*9/8,设m=9*L/gcd(L,8). ...
- WPF中多线程统计拆箱装箱和泛型的运行效率
WPF中多线程统计拆箱装箱和泛型的执行效率.使用的知识点有泛型.多线程.托付.从样例中能够看到使用泛型的效率至少提升2倍 MainWindow.xaml <Window x:Class=&quo ...
- 朝花夕拾——finally/final/finalize拨云雾见青天
Java编程中.常常会使用到异常处理,而finally看似的是try/catch后对逻辑处理的完好,事实上里面却存在非常多隐晦的陷阱.final常见于变量修饰,那么你在内部类中也见过吧.finaliz ...
- zzuoj--1001--汽水瓶(简单数学)
1001: 汽水瓶 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 194 Solved: 77 [Submit][Status][Web Board ...
- nyoj--1239--引水工程(最小生成树)
引水工程 时间限制:2000 ms | 内存限制:65535 KB 难度: 描述 南水北调工程是优化水资源配置.促进区域协调发展的基础性工程,是新中国成立以来投资额最大.涉及面最广的战略性工程,事 ...
- 你不知道的JavaScript(七)delete操作符
JS中的delete操作符不是太常用,容易被忽略,它的作用很简单,用来删除对象的属性或方法. <script type="text/javascript"> var p ...
- 1112 KGold
给出N个人在0时刻的财富值M[i](所有人在0时刻的财富互不相等),以及财富增长速度S[i],随着时间的推移,某些人的财富值会超越另外一些人.如果时间足够长,对于财富增长最快的人来说,他的财富将超越所 ...
- 待解决问题 oc
读书破万卷 Associated Object hash实现 Dynamic Method Resolution Message Forwarding forwardingTargetForSelec ...
- MySQL常用技能篇
写在之前的话: 之前一直在用MSSERVER,刚用MySQL时有很多的不适应.就此小结一下工作中遇到的问题和场景(用的不是很深入,供初学者参考),文中出现的局限性欢迎指出 MySQL有客户端式(SQL ...