今天做了一道题——循环比赛日程表,这是一道分治的题,并不太难,看看样例就懂了。
首先,我们以表格中心拆分,把表格分成四个部分(如上图所示),你就会惊奇的发现。坐上和右下的部分完全一样,左下和右上的部分也完全一样,并且继续查分的话,这个规律同样适用。
这个时候,你可能已经有思路了。下面,源代码。
1 #include<iostream> 2 using namespace std; 3 int bg[10086][10086]; 4 int m; 5 int main() 6 { 7 cin>>m; 8 int i, j; 9 int n=1<<m; 10 int k=1, size=1; 11 bg[0][0]=1; 12 while (k<=m){ 13 for (i=0; i<size; i++) //右上角 14 for (j=0; j<size; j++) 15 bg[i][j+size]=bg[i][j]+size; 16 for (i=0; i<size; i++) 17 for (j=0; j<size; j++){ 18 bg[i+size][j]=bg[i][j+size]; 19 bg[i+size][j+size]=bg[i][j]; 20 } 21 size*=2; 22 k++; 23 } 24 for (i=0; i<n; i++){ 25 for (j=0; j<n; j++) 26 cout<<bg[i][j]<<" "; 27 cout<<endl; 28 } 29 return 0; 30 }