Luo Gu P1948 Nanban divide y vencerás tótem para encontrar la ley

El significado de problemas:
n- = 1-10, el patrón de salida
es fácil ver el patrón cuando n = k, es decir, para n = k-1, cuando todo el patrón de una vez hacia la derecha, desplazamiento hacia la derecha una vez que un nuevo patrón obtenido.
Pero, ¿cómo lograrlo? ? Pensamiento. .
No podía dejar de leer este plato, el huevo o la solución a un problema. almacenamiento de la matriz, no hay problemas.
Una idea muy interesante es al revés de almacenamiento debido a almacenamiento con el fin, difícil de tratar cuando se expande desde la parte inferior izquierda
poner toda la cubierta de respaldo de información existente en la esquina inferior izquierda, la mitad superior se vacía, es difícil de conseguir, así que pusimos todo el gráfico al revés
de manera que cuando simplemente puede extenderse hacia abajo a la derecha.
Sin embargo, todavía se almacena con el fin de cumplir con la matriz característica que creo.
Realmente inteligente, hermano mayor %%%! !
Además, el tamaño del registro de la matriz, el uso de dos parámetros, cada vez que la expansión tanto del doble.

void ll(){
 for(int j=1;j<=b;j++){
 for(int i=1;i<=l/2;i++){
  a[j][i+l/2]=a[j][i];
 }}
}
void bb(){
 for(int i=b/2;i<=b-1;i++){
  for(int j=1;j<=l/2;j++){
   a[i+1][j+l/4]=a[i-b/2+1][j];
  }
 }
}
//这是main里面的拓展操作,拓展n-1次
 for(int i=2;i<=n;i++){
  l*= 2;
  ll();
  b*= 2;
  bb();
 }

inicialización

//是n=1的情况来着
 a[1][1]=a[2][2]='\\';
 a[1][2]=a[1][3]='_';
 a[1][4]=a[2][3]='/';

Operación de salida es muy maravilloso, principalmente debido a la simetría de la respuesta

for(int i=b;i>=1;i--){
  for(int j=1;j<=l;j++){
   if(a[i][j]=='_')cout << '_';
   if(a[i][j]=='/')cout << '\\';
   if(a[i][j]=='\\')cout << '/';
   if(a[i][j]==' ')cout << ' '; 
  }
  cout << endl;
 }
Publicado 24 artículos originales · ganado elogios 2 · Vistas 974

Supongo que te gusta

Origin blog.csdn.net/weixin_43521836/article/details/88599559
Recomendado
Clasificación