1) next_permutation () 【# include <algorithm>】
Funktion: Finden Sie die Funktion der nächsten Permutation einer Art, Sie können alle Permutationen durchlaufen.
Referenzfall: Noip Popularity 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;
}
Die entgegengesetzte Funktion ist prev_permutation (dh eine Funktion, die die vorherige Permutation einer Art sucht).
Ein guter Artikel http://blog.sina.com.cn/s/blog_9f7ea4390101101u.html
2) nth_element 【#include <Algorithmus>】
Funktion: Diese Funktion wird hauptsächlich verwendet, um die k-te kleinste Ganzzahl im Array-Element zu entladen und im Array zu platzieren, das jederzeit aufgerufen werden kann, was sehr praktisch ist.
(Arrayname, Arrayname + k-te kleinstes Element, Arrayname + Anzahl der Elemente)
Referenzfall: Luogu P1923 [Deep Base 9. Beispiel 4] Finden Sie die k-te kleinste Zahl
#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小整数
}
Artikel empfohlen https://blog.csdn.net/sugarbliss/article/details/88050145
3) Dichotomisches Denken
Wenn der Titel etwas mit "maximalem Minimum" oder "minimalem Maximum" angibt, sollte dieses Ding die Begrenztheit (offensichtlich) und Monotonie (sichtbar) der binären Antwort erfüllen.
Beispiel: Luogu P2440 Holzverarbeitung
#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) Schnelles Lesen
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) Rückwärtsklappfunktion
Reverse String Funktion in STL \ color {red} \ text {reverse ()} reverse ()
Das Format lautet: reverse (reverse (Arrayname .begin (). Begin () ,, Arrayname .end (). End ()););
Luogu P5705 [Deep Base 2. Beispiel 7] Nummernumkehr
#include<bits/stdc++.h> //文件头
using namespace std;
string a; //定义字符串
int main()
{
cin>>a; //输入
reverse(a.begin(),a.end()); //反转
cout<<a; //输出
return 0; //养成好习惯
}
6) Schnelle Zugvorlage
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) Finden Sie x zur Potenz von y pow (x, y);
In der Header-Datei math.h enthalten