POJの足は、エミュレート

poj3061サブシーケンス

トピックへのリンク:http://poj.org/problem?id=3061

チャレンジP146。問題の意味:その後、長さNの整数A0、A1、...、(N-1)、及び整数Sの列の所定の数、及び溶液が存在しない場合、以下の連続サブシーケンスSの最小長さより和ゼロへの出力。$ 10 <N <10 ^ 5,0 <a_iを<= 10 ^ 4、S <10 ^ 8 $。

思考:サイズは、エミュレートされ、開始添字Sを設け、下付き文字eはオフされ、和のために、最初にS = E = 0;和<Sは、Aは、合計場合和(E)、及びeプラス1を、増加する場合> = S、TSの更新、および合計を減算(S)、SJ 1件の増加、及び比較及びS、この手順が繰り返され、その後、コードブックは、直接結合されています

書式#include <cstdioを> 
する#include <iostreamの> 
の#include <アルゴリズム> 
std名前空間を使用しました。
INTのmain(){ 
    int型のx、[100005]。
    cinを>> X; 
    一方、(X - ){ 
      int型、S = 0、T = 0、和= 0、S、N、ANS。
      CIN >> N >> S; 
      ANS = N + 1。
      以下のために(INT i = 0; iがn <; iは++)
        CIN >> [I]。
      (;;){ため
        、一方(T <N &&和<S){ 
            合計+ = A [T ++]。
        } 
        (合計<S)であれば
            ブレーク。
        ANS =分(ANS、TS)。
        sum- = [S ++]。
      } 
      IF(ANS> N)
        COUT << 0 << ENDL。
      他のcoutの<< ANS <<てendl;

poj2566バウンドFOUND

トピックへのリンク:http://poj.org/problem?id=2566

問題の意味:長さのシーケンスを考えるn及び非負整数t、連続配列のシーケンスを見つけること、に最も近いとTの絶対値ように、左右のインデックスシーケンスの出力。

このタイトルは確かにTになります暴力の足エミュレート部分に「挑戦」の演習は、エミュレートされた足を感じるように起動しないで、まだあまりにも多くの食べ物を自分自身を発見した問題の解決策を見て、形状の下ではほとんど変化しません,,,,

通常、列の数は、足があれば、彼らは接頭辞、その後放電が順序付けなる配列、及びzの構造を得るように、順序付けされていない列の数に、順序付けされるエミュレートされた[i]は、プレフィックス情報を格納し、 、Z [i]は.X IそのZ [i]は.Y記録初期I、最寄り足エミュレートされた添字tはソート約価値がある更新するために使用することができるので、私は、ソートされた変化するので、フロントの数を表し、 > _-> - ああ、より明確に話す必要があります

#include <cstdioを> 
する#include <iostreamの> 
する#include <アルゴリズム> 
の#include <cmath> 
使用して名前空間std。
INTのN、K、[100005]。
構造体Z { 
int型のX; 
yはint型。
} Z [100005]。
BOOL CMP(Z AとZ Bの){ 
戻りAX <BX。
} 
int型のmain(){ 
    一方(のscanf( "%d個の%のD"、&N&K)&&(N!= 0 || K!= 0)){ 
          Z [0] .X = Z [0] .Y = 0; 
          {ため(iは++; iがn <I = 0 INT) "%d個"、&[i])とscanf関数と、
            Z [I + 1] .X = Z [i]が.X + [I]。
            Z [I + 1] .Y = I + 1。
          } 
    ソート(Z、Z + N + 1、CMP)。
    以下のために(INT i = 0; iはK <; iは++){ 
            int型のP; int型、S = 0、T = 1、TEMP、ミネソタ州= 0x3f3f3f3f、L、R、ANS。
        scanf関数( "%のD"、&P)。
             TEMP = Z [T] .xz [S] .X。
            IF(ABS(TEMP-P)<ミネソタ州){ 
               ミネソタ州= ABS(TEMP-P)。
               L = Z [T] .Y。
               R = Z [S] .Y。
               ANS =温度; 
            } 
               (TEMP> P)であれば
                  S ++。
               それ以外の場合(温度<P)
                  T ++; 
               他に休憩; 
               もし(S == tの)
                 T ++; 
          } 

    のprintf( "%D%D%D \ n"は、ANS、分(L、R)+ 1、MAX(L、R))。
    } 

    } 
}

poj2100墓地デザイン

トピックへのリンク:http://poj.org/problem?id=2100

質問の意味:数nを考えると、降順の配列の長さおよびシーケンス全体の出力シーケンスの長さに応じて、自然数の連続したシーケンスは、正方形のそれらの和がnであることを確認することがあるかどうかを尋ねます

足は、エミュレート、およびpoj3061基本的に同じ、出力要件ので、限り、標準構造の長さと次のレコードを開始します。

書式#include <cstdioを> 
する#include <iostreamの> 
の#include <アルゴリズム> 
std名前空間を使用しました。
構造体Z { 
長い長い整数X、Y、Z。
} Z [1000005]。
INT)(主{ 
長い長いINT ANS = 0、S、S = 1、T = 1、和= 0。
cinを>> S。
(;;){ため
    、一方(合計<S){ 
        合計+ =のT *のT; 
        トン++; 
    } 
    (合計== S){もし
        Z [ANS] .X = TSを、
        Z [ANS] .Y = S。
        Z [ANS] .Z = T-1。
        ANS ++; 
    } 
    sum- = S * S。
    S ++; 
    もし(S * S> S)ブレーク。
} 
(ANS == 0)であれば
    COUT << 0 << ENDL。
    他の{ 
        coutの<< ANS <<てendl;
        {(; iがANSを<I ++はiが0 = INT)のための
            COUT << Z [i]が.X <<」「。
            int型J。
            (; J <Z [i]が.Z J ++ J = Z [i]を.Y)用
                COUT << J <<」「。
            coutの<< J <<てendl; 
        } 
    } 
}

連続素数の和poj2739

トピックへのリンク:http://poj.org/problem?id=2739

問題の意味:既知数N(2 <= N <= 10000); nは、その後、連続素数の数として表されるn個の連続する素数であり、nがどのように多くの表現を求められることができる場合。

アイデア:スクリーニング方法内の最初の数nが素数のテーブルを作るために、その後、判断が足をエミュレートすることができます。

書式#include <cstdioを> 
する#include <iostreamの> 
名前空間stdを使用。
[10005] INT [10005]プライム、ANS = {0}、is_prime [10005]。
INTのmain(){ 
 int型のP = 0。
 (私は++; I <= 10000 I = 0をINT)するための
    [I] = 1 is_prime。
 is_prime [1] = is_prime [1] = 0; 
 以下のために(INT I = 2; I <= 10000; iは++){ 
    IF(is_prime [I]){ 
        素数[P ++] = I。
        用(INT J = 2 * I; J <= 10000; J + = I)
            is_prime [J] = FALSE; 
    } 
 } 
 int型、S = 0、T = 0、和= 0。
 (;;){ため
    、一方(T <10000 &&和<= 10000){ 
        合計+ =プライム[T ++]。
        ANS [合計] ++; 
    } 
      和= 0; S ++; T =秒; 
      もし(プライム[S]> 10000)を
         破ります。
  } 
 INT N; 
 一方、(!(CIN >> N)&& N = 0){ 
    COUT << ANS [N] << ENDL。
 } 
}

  

  

 

おすすめ

転載: www.cnblogs.com/dlutjwh/p/10988144.html