問題の戦争液の羅区P5461は、恩赦の囚人

P5461の恩赦の囚人

トピックの背景

アンチチートシステムでは、盗作の不正行為の選手の月のゲームの一部が出て摘発されました!

タイトル説明

既存の\を(2 ^ n個の\回2 ^ n個(n個の\ le10は)\) kkksc03喜びの正方行列を待ってスタンドを浮気しました。kkksc03は詐欺師の数はご容赦することを決めました。彼は、マトリックスが各小さい辺の長さは、マトリックスの元の行列の半分であり、4つのより小さな正方行列に分割される正方形であろう。すべての不正行為で許される行列の左上隅、そして残りの3つの小行列、各行列は、4つの小さな行列に分割され続け、その後、行列はもはやできるようになるまで、同じ方法でカンニング人々を容赦......ポイントが上がります。すべての不正行為は処罰され赦免されていないブラウンの名によって処罰されます。

0が許されていないため、1を許さ表し詐欺師あたりnnは、してください運命の出力を、提供します。

入力形式

整数\(N-用\)

出力フォーマット

\(^ 2のn \回2 ^ n個\) 01行列の、人々が赦免されたかどうかをそれぞれ表します。数字の間にスペースがあります。

サンプル入力と出力

入力#1

3

出力#1

0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 1
0 0 0 0 0 1 0 1
0 0 0 0 1 1 1 1
0 0 1 0 0 0 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
1 1 1 1 1 1 1 1

[思考]

再帰+パーティションは、
これは非常に興味深いトピックがある
個人的なモデリング機能や、自分の理解する能力とみなされ
、能力が心の中でモデルを確立することは明らかであるモデリング機能を
念頭にシミュレートされた再帰的プロセスを想像する対象に応じて
その後、再帰式を来る
ので、それが何であるかを認識する能力を?
それは、私は彼らが自分自身のモデリング機能を持っているとは思わないされ
た後、見ていることを考えて、当然それを取る
最終結果はまだ長い時間のためになりたいしていない
ので、あなたが持っているこの時間は、紙とペンのビットを移動するために
鮮明な画像が考えて描くように
、これは彼らの能力を理解することです! !
私はそう引き起こすモデリングする機能と能力の無理解を持っていないこの質問は私に長い時間がかかりました

これは、\(2 ^ n個\)の正方形、正方形のとき4回の合同分かれそうたび
辺の長さが2の倍数を満たすためだけであり、そして四角で構成することができ
ますので、\(2 ^ n個\)それぞれ別々の2で割った後、
なり- \は({1} \ N-2は、^) または2の倍数
ので、あなたが知っている1分間に続けることができます
あなたが徹底的に理解するために必要なコードを書く前に、これはあります

次に、それは、正方形の左上隅が赦される可能であるためには、
0です。
その上だから、再帰的な他の三つの正方形

私は、コーナー上の頂点の各再帰再帰その二対のことを考える
と、次にその頂点位置の変化によって、正方形の変化を決定するために
、再帰的な達成するために、

最初にこの小さな正方形の右上検討

X1が変更されていない、上記の左上隅(1,5)における頂点位置を
、X1 = X1を得ることができる
が、実際に変更Y1
、Y2が元の位置だけ大きい正方形である、5になりました半分の長さ+ 1
を得ることができるY1 = Y1 +(Y2 - Y1 + 1)/ 2 又はY1 = Y1 +(Y2 - Y1 )/ 2 + 1
の理由の両方
及び右下の頂点を(4,8 )の上方
X2元の半分を得ることができるされ
、X2 =(X2 - X1 + 1 )/ 2、
なぜこれがそうですか?代わりに、X2 = X2 / 2、それは
1×1、に等しいの例として、
x1は常に1に等しくない場合、
x1が個々に等しいならば、あなたは、X2 = X2 / 2をもたらすには大きな問題があります
私たちが考えるように、私は右のことを言いました!
Y2はそれほど利用可能で変更されない
Y2 = Y2
そう簡単に起動
- (X1、Y1の+(Y2 、Y1 + 1)/ 2、X2 / 2、Y2)

正方形の右上隅を処理することができ、したがってインクルード

それを起動することができます良いのこれらの他の2つの正方形を知って
、私は多くを言うことはありません、ここでは
上記のようなプロセスはまったく同じであるので、
うまく各座標の変化を分けて考えます

直接所与:
正方形の左下隅:(×1 +(X2 - X1 + 1)/ 2、Y1、X2、Y1の+(Y2 - Y1)/ 2)、
正方形の右下隅:(×1 +(X2 - X1の + 1)/ 2、Y1の+( Y2 - Y1 + 1)/ 2、X2、Y2)。

[完了コード】

#include<iostream>
#include<cstdio>

using namespace std;
const int Max = 1030;
int a[11] = {1,2,4,8,16,32,64,128,256,512,1024};
int f[Max][Max];

void acioi(int x1,int y1,int x2,int y2)
{
    if(x1 == x2 && y1 == y2)
    {
        f[x1][y1] = 1;
        return;
    }
    acioi(x1 + (x2 - x1 + 1) / 2,y1 + (y2 - y1 + 1) / 2,x2,y2);
    acioi(x1,y1 + (y2 - y1 + 1) / 2,x1 + (x2 - x1) / 2,y2);
    acioi(x1 + (x2 - x1 + 1) / 2,y1,x2,y1 + (y2 - y1) / 2);
}

int main()
{
    int n;
    cin >> n;
    acioi(1,1,a[n],a[n]);
    for(int i = 1;i <= a[n];++ i)
    {
        for(int j = 1;j <= a[n];++ j)
            cout << f[i][j] << " ";
        cout << endl; 
    }
    return 0;
}

おすすめ

転載: www.cnblogs.com/acioi/p/11616918.html