【规律】成長長方形スパイラル

成長長方形スパイラル

タイトル説明

成長方形スパイラルは、原点から始まる定額セグメントの接続シーケンスです。第1のセグメントは、右(正のx方向)に進みます。次のセグメントは、(正のy方向)に上昇します。次のセグメントは、(負のx方向)左進みます。次のセグメントがダウン(負のy方向)方向の配列が繰り返されます。各セグメントは、整数の長さを有し、各セグメントは、前のセグメントよりも少なくとも1つの単位長いです。右側の螺旋状に、セグメント長は1、2、4、6、7、9,11、12、15、20である
で終了する(全長)最短成長方形スパイラルを決定するためのプログラムを書きます第1の象限の整数点(x、y)が与えられた、またはそのような螺旋が存在しないことを決定します。

エントリー

入力の最初の行は、以下のデータセットの数であり、単一の整数P(Pは≤1000≤1)を含みます。各データセットは、同じように独立して処理されるべきです。
各データセットは小数点整数を分離された3つの空間からなる入力の単一の行から成ります。
最初の整数は、データセットの数です。次の二つの整数は、所望のエンドポイントのx座標とy座標である(1≤X≤10000、1 10000≤Y≤)。

輸出

各データの出力の単一の行がある設定。何のスパイラルソリューションが存在しない場合は、行がデータセット数、単一のスペースと、(引用符なし)「NO PATH」で構成されています。溶液が存在する場合、行がデータセット数、単一空間、溶液中のセグメントの数、単一のスペースで区切られた順序でセグメントの長さに続く単一スペースからなります。パスが22個の以上のセグメントを必要としないように、入力データが選択されます。

サンプル入力

3 
1 1 1 
2 3 5 
3 8 4

サンプル出力

1 NO PATH 
2 2 3 5 
3 6 1 2 3 9 10 11を


[説明]

  それは、点(x、y)に行ってきましたように、螺旋状の折り線があるかどうかを尋ね、すべてのねじれやターンは厳密に順序が増加しています。

  出力パスが存在してください。そうでない場合は、出力「NO PATH」

[法律]

  1、IF(x、y)はY> X 2つの旋回点が到着明らかです。

  図2は、Y == Xの場合、そのようなパスが存在しないです。

  3、X <Y、実際には、ステップ6の効果を達成するために差を構築するためのx、yの関係の使用は、特定のコードが表示された場合。

 

 

1  の#pragma GCCの最適化( "Ofast、無スタックプロテクター")
 2  の#pragma GCCの最適化( "O3")
 3  の#pragma GCCの最適化(2)
 4の#include <ビット/ STDC ++。H>
 5  の#define INF 0x3f3f3f3f
 6  #define LINF 0x3f3f3f3f3f3f3f3fll
 7  の#defineパイACOS(-1.0)
 8  の#define NL "\ n"
 9  の#define PII対<-1,11,11->
 10個 の#define MS(B)のmemset(A、B、はsizeof(A) )
 11  の#define FAST_IO IOS :: sync_with_stdio(NULL); cin.tie(NULL); cout.tie(NULL)
 12  使用 名前空間STD;
13のtypedef 長い LL。
14  のconst  int型 MOD = 998244353 15 LLのqpow(LLのX、LLのY){LL S = 1一方、(Y){ 場合(Y&1 S = sで* X%MOD); X = X * X%MOD; Y >> = 1 ;} 戻りS;}
 16  // LL qpow(-1,11,11- b)は{ LL S = 1;一方、(B> 0){IF(B%2 == 1)S = sの*; = *のA; B = B >> 1;}戻りS;} 
17インラインINT読み出します( ){ int型のx = 0、F = 1チャー CH = GETCHAR()。しばらく(CH < "0 ' || CH> ' 9 '){ 場合(CH == ' - ')、F = - 1 ; CH = GETCHAR();} 一方(CH> = ' 0 ' && CH <= ' 9 ')のx = xと* 10 + CH- ' 0 '、CH = GETCHAR()。リターン X * F;}
 18    
19  のconst  int型 N = 1E5 + 5 20    
21    
22  のint main()の
 23  {
 24      INT _、CAS、X、Y。
25     (scanf関数(" %dの" ; _--&_);)
 26      {
 27          のscanf(" %dの"、およびCAS)。
28          のscanf(" %D%dの"、およびX&Y)。
29          のprintf(" %dの" 、CAS)。
30          であれば(x == y)のプット(" NO PATH " )。
31          他の 場合(X < Y){
 32              のprintf(" 2%Dの%d個の\ n " 、x、y)は、
 34          {
 35              であれば(Y < 4)プット(" NO PATH " )。
36              {
 37                  のprintf(" 6 1 2 3%D%D%D \ n "、X + 3 -y + 2、X + 2、X + 3 )。
38              }
 39          }
 40    
41      }
 42    
43 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/Osea/p/11387196.html