2017年北京ネットワークゲームFシークレット詩蛇行ループ出力

制限時間:1000ミリ秒
時間のシングルポイント:1000ミリ秒
メモリの制限:256メガバイト

説明

雍正帝(1678 1735年12月13日から10月8日まで)は、中国の清王朝の第五の皇帝でした。彼は非常に勤勉な支配者でした。彼は汚職に取り締まっと彼の治世は、専制的、効率的、かつ積極的であることのために知られていました。

雍正は清または彼についての悪い言葉を言って人を容認することができませんでした。そこで彼は、「言葉の刑務所」と呼ばれる運動を開始しました。「言葉の刑務所は、」文字の獄を意味します。有名荘Tinglongケースでは、70以上の人がいるため明代の不正歴史の出版物の3年間で処刑されました。

彼らは何かを書きたい場合は要するに、雍正の治世下の人々は非常に注意しなければなりません。だから、いくつかの詩人は彼らの友人のサークルで唯一の人々が読むことができる非常に奇妙な方法で詩を書きました。詩のこの種の秘密の詩と呼ばれていました。

秘密の詩はランダムと意味は何ものように見える文字のN×N行列です。あなたが特定の順序で文字を読んでいる場合でも、あなたはそれを理解します。順序は、以下の図1に示されています。

            図1図2

矢印で示した順番に続いて、「THISISAVERYGOODPOEMITHINK」を得ることができ、それが何かを意味することができます。

しかし、いくつかの時間後に、詩人は、いくつかの雍正の秘密エージェントが氏」と呼ばれることが判明しました 血液滴下は、」あまりにも詩のこの種を読むことができます。それは危険でした。そこで、図2に示すように、彼らは、書き込み詩の新しい秩序を導入し、彼らが新しい順にものに図1.と古い順に書かれた古い詩を変換したかったです。彼らを助けてください。

エントリー

10以下のテストケースはありません。

各テストケースの場合:

最初の行は、詩は大文字で構成されてN×N行列であることを示す整数値N(1 <= N <= 100)です。

次いで、Nラインは、次の各ラインは、N個の文字列です。これらのNラインは古い順に詩を表します。

輸出

各テストケースの場合は、新しい順に詩の中に古い順に詩を変換します。

サンプル入力
5 
THSAD 
IIVOP 
SEOOH 
RGETI 
YMINK 
2 
ABの
CD 
4 
ABCD 
EFGH 
IJKL 
MNOP
サンプル出力
THISI 
POEMSの
DNKIA 
OIHTV 
OGYRE 
AB 
DC 
ABEI 
KHLF 
NPOC 
MJGDの

タイトルの意味:図中の生データ保存する方法、そして今は、図IIモードと出力によって生データを保存したい

ソリューション:
元のデータを抽出し、マップの最初の観測。観察は知っている、データがいずれかの保存された配列を上下、(; iは<I = 0のためのように、副対角に応じてあり 、2 *をN I ++)はサイクルシミュレーション。
iが奇数の下方向である場合、上方向は、それがあると判定された場合、偶数であることが、観察中の
蛇行ループで、各正方形は約徒歩図IIを見て、各円の起点であります主対角線、開始座標(x、y)の各回転プラスいずれかを完了しており、正方形の辺は2で低減されます。
アナログ四方に再び歩く

兄コード
#include <iostreamの> 
する#include < 文字列・H> 
の#include < ストリング > 
の#include <アルゴリズム> 
の#include <math.h>の
書式#include < ストリング > 
の#include < 文字列・H> 
の#include <ベクトル> 
する#include <ユーティリティ> 
書式#include <マップ> 
書式#include <キュー> 
の#include < 設定 >
 の#define MX 0x3f3f3f3f
 の#define LL長い長い
 の#define MAXN 105
 使用して 名前空間はstdを、
int型ANSは、N、M、T、X;
 CHAR STR [MAXN] [MAXN];
 ストリングS、
 ボイド DFS(int型の Xは、int型 Yを、INT N-、INT T)// (X、Y)は、出発点の座標、nは正方形碁の側面
{
     IF(N < 1。 リターン;
     のためint型私は= Y; Iは+ N-Y <; I ++では)// 右に行く 
        STR [X] [I] =のS [++ T ;]
     のためにINT I = X + 1 ; Iは+ N-Xを<;私は++が)// ダウン 
        STR [I] [Y + N- 1 ] =のS [++ Tを;]
     のためののInt I = N- Y + 2 ; I> = Y; i--)// 左に行く 
        STR [N- + X 1 ] [I] =のS [++ T ;]
     のためにint型 I = X + N- 2、I> X; i--)// 上がる 
        STR [I] [Y] = S [++ Tを]; 
    DFS(X + 1、Y + 1、N- 2、T); //は、後に回転を完了しました、+1の主対角線に沿って開始、ラップ側長-2 
}
 int型のmain()
{ 
    一方(CIN >> N-)
    { 
        s.clear()
        のためにint型 I = 0 ; I <N-; I ++
            CIN >> ; STR [I]
         のためのint型 I = 0 ; Iは< 2 ; * N-をIは++)// サイクル対角線
        {
             IF(%I 2// ダウンする奇数時間
            {
                 ためINT J I =; J> = 0 ; J、 IFの(IJ <&& N-J < N-)
                        S + STR =〔のIJ ] [J]; 
            } 
            そうに// も上がる
            {
                 ためINT J =0 ; J <= I; J ++ 場合(IJ <N && J < N)
                        S + = STR [IJ ] [J]。
            } 
        } 
        DFS(00、N、0 );
        int型 iは= 0 ; iがN <I ++は
            COUT << STR [I] << ENDL。
    } 
    戻り 0 
}

 

 
   

おすすめ

転載: www.cnblogs.com/-citywall123/p/11350673.html