aboutsummaryrefslogtreecommitdiff
path: root/0014
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-08-23 22:03:17 +0800
committerMistivia <i@mistivia.com>2025-08-23 22:07:19 +0800
commit16bb535cdf949eaed2c4981166d82db092915532 (patch)
treec92b6b2a5b9e490ee494c431ad37cc91a5cc00d8 /0014
parent345f3268bdfb191282bf44cdd2c8121c33d2560a (diff)
solve 14
Diffstat (limited to '0014')
-rw-r--r--0014/main.pas65
1 files changed, 65 insertions, 0 deletions
diff --git a/0014/main.pas b/0014/main.pas
new file mode 100644
index 0000000..a79200f
--- /dev/null
+++ b/0014/main.pas
@@ -0,0 +1,65 @@
+program main;
+
+const N = 1000000;
+
+var
+ res: array[1..N] of longint;
+
+function getlen(x: int64): longint;
+var
+ r: longint;
+ sp: longint;
+ argstk: array[1..1000] of int64;
+begin
+ sp := 0;
+ while (x > N) or (res[x] = -1) do
+ begin
+ sp := sp + 1;
+ argstk[sp] := x;
+ if x mod 2 = 1 then
+ x := x * 3 + 1
+ else
+ x := x div 2;
+ end;
+ r := res[x];
+ while sp > 0 do
+ begin
+ if argstk[sp] <= N then
+ res[argstk[sp]] := r + 1;
+ r := r + 1;
+ sp := sp - 1;
+ end;
+ getlen := r;
+end;
+
+var
+ len: longint;
+ i: longint;
+ maxres: longint;
+ maxlen: longint;
+
+begin
+ len := 0;
+ maxres := 0;
+ maxlen := 1;
+ i := 1;
+ while i <= N do
+ begin
+ res[i] := -1;
+ i := i + 1;
+ end;
+ res[1] := 1;
+
+ i := 1;
+ while i <= N do
+ begin
+ len := getlen(i);
+ if len > maxlen then
+ begin
+ maxres := i;
+ maxlen := len;
+ end;
+ i := i + 1;
+ end;
+ writeln(maxres);
+end.