0)在G++不支持%lf,如果G++提交请用%f,如果C++提交请用%lf 。
1)next_permutation()【#include <algorithm>】
作用:求一个排序的下一个排列的函数,可以遍历全排列。
参考案例:Noip普及组2004 火星人
#include<bits/stdc++.h>
using namespace std;
int a[10005],n,m;
int main(){
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)scanf("%d",&a[i]);
while(m--) next_permutation(a,a+n);
for(int i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d",a[n-1]);
return 0;
}
与之完全相反的函数还有prev_permutation(就是一个求一个排序的上一个排列的函数)
一个不错的文章 http://blog.sina.com.cn/s/blog_9f7ea4390101101u.html
2) elelment【#include<algorithm>】
1.nth_element
作用:这个函数主要用来将数组元素中第k小的整数排出来并在数组中就位,随时调用,可谓十分实用。
#include<bits/stdc++.h>
using namespace std;
long long n,k,a[5000010];
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
nth_element(a+1,a+k+1,a+n);//使第k小整数就位
printf("%d",a[k]);//调用第k小整数
}
你会发现,第3大的数3到了该去的位置,并且在3前面的数都比3小,在3后面的数都比3大
2.max_element / min_element
#include <iostream>
#include <algorithm>
using namespace std;
int main(void)
{
int a[6] = {5, 3, 2, 6, 1, 4};
cout<<max_element(a, a+6) - a<<endl;// 输出为3
cout<<*max_element(a, a+6)<<endl;//输出为 6
cout<<min_element(a, a+6) - a<<endl;// 输出为4
cout<<*min_element(a, a+6)<<endl; //输出为1
return 0;
}
3)二分思路<