Corte de línea
Nota: actualización continua
Conocer el orden, ordenar y ordenar
Luogu 1827 origen americano
Código:
#include<bits/stdc++.h>
using namespace std;
void dfs(string xx,string zx){
if(!xx.size()) return;
int pos=zx.find(xx[0]);
dfs(xx.substr(1,pos),zx.substr(0,pos));
dfs(xx.substr(pos+1),zx.substr(pos+1));
printf("%c",xx[0]);
}
int main(){
string xx,zx;
cin>>zx>>xx;
dfs(xx,zx);
printf("\n");
}
Encuentra el preorden en el postorder
Luogu 1030 Buscando orden
Código:
#include<bits/stdc++.h>
using namespace std;
void dfs(string zx,string hx){
if(!zx.size())return;
int pos=zx.find(hx[hx.size()-1]);
printf("%c",zx[pos]);
dfs(zx.substr(0,pos),hx.substr(0,pos));
dfs(zx.substr(pos+1),hx.substr(pos,hx.size()-pos-1));
}
int main(){
string zx,hx;
cin>>zx>>hx;
dfs(zx,hx);
printf("\n");
}
Encuentre el número de pedidos medios, dado el pedido primero
Problema transversal de Luogu 1229
Código:
Idea: Obviamente, si solo hay un hijo, habrá un desacuerdo de orden medio. Para encontrar el número de nodos con un solo hijo, solo necesita encontrar cuántos pares de letras están uno al lado del otro en el preorden y postorder e intercambiar entre sí. Por ejemplo, ab en el preámbulo y ba en el postámbulo. Obviamente, a tiene un solo hijo b.
#include<bits/stdc++.h>
using namespace std;
int main(){
char a[400],b[400];
scanf("%s%s",a,b);
long long n=0;
for(int i=0;i<strlen(a)-1;i++)
for(int j=1;j<strlen(b);j++)
if(b[j]==a[i]&&a[i+1]==b[j-1]){
n++;continue;
}
printf("%lld\n",1<<n);
}