Mémo de connaissances fragmentaires

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

Je suppose que tu aimes

Origine blog.csdn.net/qq_41754350/article/details/108907707
conseillé
Classement