冗談オフニンニクの総交換(DFS)

 

 

ポータル

効果の件名:

ニンニクと少しいたずら。今回は、テストでは、彼女の妹は冷血殺害報告しています。

元々スペースで区切られた任意の二つの数字の間に、ラボ姉妹に1からnまでのシーケンスを記録しました。しかし、「ピット妹」ニンニクは実際にデジタル間のスペースを削除与えた数字の文字列にデジタル・シーケンスの全体の長さと1〜100であり、ヘッダスペースなし。

今、私の姉はすぐにテストデータ復旧にプログラムを書く見つけるニンニク、怒りを持っています。

エントリー

入力ファイルの行、列は - 実験データニンニクメッシングです。

1と100の間の文字列の長さ。

輸出

n個の出力を1 - 生姉妹データをテストするための出力コモンライン、。

任意の二つのデータの間にスペースがあります。

正解の要件に沿って複数設定した場合、任意のグループの出力とすることができます。

この質問への唯一の答えは、答えの要件が正しい満たしていません

サンプル入力

4111109876532

サンプル出力

4  1  11  10  9  8  7  6  5  3  2

 

問題解決のアイデア:

文字列の長さが100を超えていないので、我々は最大54 N、我々のみ列挙する必要があり、2桁の数字で計算することができます。

最初のない数だけ、オープン数のアレイの上からn文字列の長さは、標識された列挙子を計算する標識よりも小さいか生き残る次の検索に進みNに等しいです。

 

サイズ<= 9:N =サイズ

サイズ> 9:N =(サイズ-9)/ 2 + 9

 

1の#include <stdio.hの>
 2の#include < ストリング・H>
 3の#include <iostreamの>
 4の#include < ストリング >
 5の#include <math.h>の
 6の#include <アルゴリズム>
 7の#include <ベクトル>
 8#含む<スタック>
 9の#include <キュー>
 10の#include < セット >
 11の#include <地図>
 12の#include <sstream提供さ>
 13  のconst  int型 INF = 0x3f3f3f3f 14 typedefの長い 長いLL。
 const  int型 MOD = 1E9 + 7 16  CONST  ダブル PI = ACOS( - 1 )。
17の CONST  ダブル EPS = 1E- 8 18  の#defineバグCOUT << "---------------------" << ENDL
 19  CONST  INT MAXN = 1E5 + 10 20  使って 名前空間はstdを、
21  のconst  int型プライム[ 15 ] = { 2357111317。1923であり2931は3741は43であり47 };
 22である 
23がある 文字列STR;
 24  int型 N-; // 事前に計算され、プルーンに使用することができる
25  INT [ANS 105 ]; 
 26である BOOL VIS [ 105 ]。// 番号が表示されていないかどうかを判断
27  BOOL 旗;
 28  
29  無効 DFS(int型 STEP、int型 NUM)を// STEPは、いくつかの文字を表し、numが、それは数NUM見つけたと言った
30 {
 31      であれば(フラグ)のリターン ; // 最优性剪枝
32      であれば(ステップ== str.size())
 33      {
 34          のためにINT iは= 0 ; I <NUM; I ++ 35          {
 36              であれば(I == 0)COUT << ANS [私];
37              他の coutの<< '  ' << ANS [i]は、
38          }
 39          COUT << ENDL。
40          フラグ= 41          リターン;
42      }
 43      INT T = STR [ステップ] - ' 0 ' 44      であれば(T <= N && VIS [T]!)// 搜一位
45      {
 46          ANS [NUM] = T。
47          VIS [T] = 48の          DFS(ステップ+ 1、NUM + 1 )。
49          VIS [T] = ;
50      }
 51      であれば(ステップ= str.size()! - 1 52      {
 53          、T = T * 10 + STR [ステップ+ 1] - ' 0 ' ;
54          であれば(T <= N && VIS [T]!)// 搜两位
55          {
 56              ANS [NUM] = T。
57              VIS [T] = 58の              DFS(ステップ+ 2、NUM + 1 )。
59              VIS [T] = 60          }
 61      }
 62  }
 63  
64  のint main()の
 65  {
 66      DEBUGの#ifdef
 67      freopenは("SAMPLE.TXT " " R 、STDIN);
 68      #endifの
69  //     ios_base :: sync_with_stdio(偽);
 70  //     cin.tie(NULL); 
71      
72      CIN >> STR;
 73      N = str.size( )<= 9?str.size():( str.size() - 9)/ 2 + 9 ;
 74      DFS(00 );
 75      
76      リターン 0 ;
 77 }

 

 

 

 

 

 

 

 

-

おすすめ

転載: www.cnblogs.com/jiamian/p/12178818.html
おすすめ