1) next_permutation () 【# include <algorithm>】
Fonction: Trouvez la fonction de la prochaine permutation d'un tri, vous pouvez parcourir toutes les permutations.
Cas de référence: Noip Popularité Group 2004 Martian
#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;
}
La fonction opposée est prev_permutation (c'est-à-dire une fonction qui recherche la permutation précédente d'un tri)
Un bon article http://blog.sina.com.cn/s/blog_9f7ea4390101101u.html
2) nth_element 【#include <algorithm>】
Fonction: Cette fonction est principalement utilisée pour décharger le k-ème plus petit entier de l'élément du tableau et le placer dans le tableau, qui peut être appelé à tout moment, ce qui est très pratique.
(Nom du tableau, nom du tableau + kème élément le plus petit, nom du tableau + nombre d'éléments)
Cas de référence: Luogu P1923 [Deep Base 9. Exemple 4] Trouver le k-ième plus petit nombre
#include<bits/stdc++.h>
using namespace std;
long long n,k,a[5000010];
int main()
{
scanf("%d%d",&n,&k);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
nth_element(a,a+k,a+n);//使第k小整数就位
printf("%d",a[k]);//调用第k小整数
}
Article recommandé https://blog.csdn.net/sugarbliss/article/details/88050145
3) Pensée dichotomique
Si le titre spécifie quelque chose avec "maximum minimum" ou "minimum maximum", alors cette chose devrait satisfaire la délimitation (évidemment) et la monotonie (visible) de la réponse binaire.
Exemple: Luogu P2440 Traitement du bois
#include<iostream>
#include<cstdio>
using namespace std;
int n,k,maxx=0,minn=200000000,ans=0;
int a[50000000];
bool judgee(int x)
{
int alll=0;
for(int i=1;i<=n;i++)
{
alll+=a[i]/x;
}
if(alll<k)return false;
else return true;
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(minn>a[i]) minn=a[i];
if(maxx<a[i]) maxx=a[i];
}
int mid,l=1,r=maxx;
while(l<=r)
{
mid=(l+r)/2;
if(judgee(mid))
{
ans=mid;
l=mid+1;
}
else r=mid-1;
}
printf("%d",ans);
return 0;
}
4) lecture rapide
int read(){//我喜欢快读
int num = 0;
char c;
bool flag = false;
while ((c = getchar()) == ' ' || c == '\n' || c == '\r');
if (c == '-') flag = true;
else
num = c - '0';
while (isdigit(c = getchar()))
num = num * 10 + c - '0';
return (flag ? -1 : 1) * num;
}
5) fonction de retournement inversé
Fonction de chaîne inverse en STL \ color {red} \ text {reverse ()} reverse ()
Le format est le suivant: reverse (reverse (nom du tableau .begin (). Begin () ,, nom du tableau .end (). End ()););
Luogu P5705 [Deep Base 2. Exemple 7] Inversion de numéro
#include<bits/stdc++.h> //文件头
using namespace std;
string a; //定义字符串
int main()
{
cin>>a; //输入
reverse(a.begin(),a.end()); //反转
cout<<a; //输出
return 0; //养成好习惯
}
6) Modèle de peloton rapide
void qasort(int l,int r)
{
int i,j,mid,p;
i=l;j=r;
mid=a[(l+r)/2];
do
{
while (a[i]<mid) i++;
while (a[j]>mid) j--;
if(i<=j)
{
p=a[i];a[i]=a[j];a[j]=p;
i++;j--;
}
}while(i<=j);
if(l<j) qasort(l,j);
if(i<r) qasort(i,r);
}
7) Trouvez x à la puissance de y pow (x, y);
Inclus dans le fichier d'en-tête math.h