Die Lösung von Luogu P5461

Titelportal: https://www.luogu.com.cn/problem/P5461

Die Analyse des Problems hat offensichtlich die Natur der Rekursion, der Code ist auch sehr einfach, einfache Simulation + Rekursion.

In den Codekommentaren finden Sie spezifische Erklärungen.

Code:

1 #include <iostream>
 2  using  namespace std;
 3  int n;
 4  int num [ 15 ] = { 1 , 2 , 4 , 8 , 16 , 32 , 64 , 128 , 256 , 512 , 1024 }; // Dutzend eins Blatt 2 Leistungstabelle 
5  int sum [ 2000 ] [ 2000 ];
 6  void work ( int x1, int y1, intx2, int y2, int flag, int len) { // x1, y1 sind die Koordinaten der oberen linken Ecke, x2, y2 sind die Koordinaten der unteren rechten Ecke, Flag bedeutet (0) nicht (1) alle Nullen in diesem Bereich, len befindet sich in diesem Bereich Seitenlänge. (Tatsächlich ist x2y2 mit len ​​nicht erforderlich.) 
7      if (flag == 0 ) return ; // Wenn alles Null ist, tun Sie es nicht, da der Anfangswert der Summe 0 
8 ist,      wenn (len == 1 ) {
 9          sum [x1] [y1] = 1 ;
 10          return ;
 11      } // Wenn die Länge dieses Intervalls 1 und nicht alle Nullen beträgt, weisen Sie 1 
12      Arbeit zu (x1, y1, x2-len / 2 , y2-len / 2) , 0 , len / 2 );// Das Intervall in der oberen linken Ecke beträgt 
13      Arbeit (x1, y1 + len / 2 , x2-len / 2 , y2, 1 , len / 2 ); // Die folgenden Intervalle müssen erneut wiederholt werden 
14      Arbeit (x1) + len / 2 , y1, x2, y2-len / 2 , 1 , len / 2 );
 15      Arbeit (x1 + len / 2 , y1 + len / 2 , x2, y2, 1 , len / 2 );
 16  }
 17  int main () {
 18      cin >> n; n = num [n]; // 2
 hoch 19 19      Arbeit ( 1 , 1n, n, 1 , n);
20      für ( int i = 1 ; i <= n; ++ i) {
 21          für ( int j = 1 ; j <= n; ++ j) cout << sum [i] [j] << "  " ;
22          cout << endl;
23      } // 输出
24      return  0 ;
25 }

 

Ich denke du magst

Origin www.cnblogs.com/-YueYang-/p/12731096.html
Empfohlen
Rangfolge