Memo de conocimiento fragmentado

1) next_permutation () 【# incluir <algoritmo>】

Función: Encuentra la función de la siguiente permutación de un tipo, puedes atravesar todas las permutaciones.

Caso de referencia: Grupo de popularidad de Noip 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 función opuesta es prev_permutation (es decir, una función que busca la permutación previa de un tipo)

Un buen artículo    http://blog.sina.com.cn/s/blog_9f7ea4390101101u.html

2) nth_element 【#include <algoritmo>】

Función: Esta función se utiliza principalmente para descargar el k-ésimo entero más pequeño en el elemento de la matriz y colocarlo en la matriz, que se puede llamar en cualquier momento, lo cual es muy práctico.

(Nombre de la matriz, nombre de la matriz + k-ésimo elemento más pequeño, nombre de la matriz + número de elementos)

Caso de referencia: Luogu P1923 [Base profunda 9. Ejemplo 4] Encuentre el número k-ésimo más pequeño

#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小整数
}

Artículo recomendado  https://blog.csdn.net/sugarbliss/article/details/88050145

3) Pensamiento dicotómico

Si el título especifica algo con "máximo mínimo" o "mínimo máximo", entonces esto debería satisfacer la delimitación (obviamente) y la monotonicidad (se puede ver) de la respuesta binaria.

Ejemplo: procesamiento de madera Luogu P2440

#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) lectura rápida

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) función de inversión inversa

Función de cadena inversa en STL \ color {red} \ text {reverse ()} reverse ()

El formato es: reverse (reverse (nombre de la matriz .begin (). Begin () ,, nombre de la matriz .end (). End ()););

Luogu P5705 [Base profunda 2. Ejemplo 7] Inversión de números

#include<bits/stdc++.h>   //文件头
using namespace std;
string a;                 //定义字符串
int main() 
{
    cin>>a;               //输入
    reverse(a.begin(),a.end());  //反转
    cout<<a;              //输出
    return 0;             //养成好习惯
}

6) Plantilla de pelotón rápida

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) Encuentre x elevado a y pow (x, y);

Incluido en el archivo de encabezado math.h

Supongo que te gusta

Origin blog.csdn.net/qq_41754350/article/details/108907707
Recomendado
Clasificación