https://www.51nod.com/Challenge/Problem.html#problemId=1267
第一の方法:+半分のための2つは:十分にかかわらず複製の理解しました。しかし、これは十分な速さではありません
#include <iostreamの> する#include <cstdioを> する#include <CStringの> する#include <アルゴリズム> 使用して 名前空間をSTD。 typedefの長い 長いLL。 const int型 MAXN = 1E3 + 10 。 LL [MAXN]。 INT メイン() { LL N。 cinを >> N; 以下のために(INT iが= 0 ; I <N; I ++ ) { CIN >> [I]。 } int型 OK = 0 。 ソート(、 +N); 以下のために(INT iが= 0 ; I <N; I ++ ) { ため(INT J = I + 1、J <N; jは++ ) { 合計ちゃいます。 LL K = J + 1、M = N- 1 。 一方、(K < M) { 合計 = [I] + [J] + [K] + [M]。 もし(合計< 0 ) { K ++ 。 } それ以外の 場合(合計> 0) { M - 。 } 他 { OK = 1。休憩; } } 場合(OK) ブレーク。 } であれば(OK) ブレーク。 } であれば(OK) COUT << " はい" << ENDL。 他の 裁判所未満 << " ノー" << てendl; }
第二には、足がエミュレートされ、複雑さがnで、私たちはその後、2で割った全20の-2以外に、最大保存するが、二つの分析は重複を防ぐ時分割を追加するには、この構造が記録され、座標れます
#include <iostreamの> する#include <CStringの> する#include <cstdioを> する#include <アルゴリズム> 使用して 名前空間をSTD。 const int型 MAXN = 1E3 + 5 。 int型[MAXN]。 int型のn; 構造体ノード { int型X、Yは、Sであり; } ST [MAXN * MAXN]。 ブールCMP(ノードA、ノードB) { リターン <などBS。 } int型のmain() { int型のn; cinを >> N; 以下のための(int型iは= 0、I <N; I ++ ) CIN >> [I]。 int型 TOT = 0 ; 以下のために(INT iが= 0 ; I <N; I ++ ) { ため(INT J = I + 1、J <nであり、j ++ ) { ST [TOT] .S = [I] + [J]。 ST [TOT] .X = I; ST [TOT] .Y = J; TOT ++ ; } } ソート(ST、ST + TOT、CMP)。 int型L = 0、R = tot- 1 。 INT OK = 0 ; ながら(L < R) { 場合(ST [L] .S + ST [R]は== .S 0 ) { 場合(ST [L] .X!= ST [R] .X && ST [L] .Xを!= && .Y ST [R] ST [L] .Y = ST && ST .Y [R] [L] .Y =!ST [R] .X) { OK = 1。休憩; } そう L ++、r--の。 } そう であれば(ST [L] .S + ST [R] .S> 0 ) R- ; 他 リットル ++ ; } であれば(OK) COUT << " はい" << ENDL。 他の 裁判所未満 << " ノー" << てendl; }
私はタイムアウトを言い渡されたので、これはあまりにも上記、何回か書かれているが、私は(少なくともチェックで同じである)のクロスを何回ありますが、これまで未解決の同じコードを言ってきました。