diff options
| author | Mistivia <i@mistivia.com> | 2025-08-23 22:03:17 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-08-23 22:07:19 +0800 |
| commit | 16bb535cdf949eaed2c4981166d82db092915532 (patch) | |
| tree | c92b6b2a5b9e490ee494c431ad37cc91a5cc00d8 /0014 | |
| parent | 345f3268bdfb191282bf44cdd2c8121c33d2560a (diff) | |
solve 14
Diffstat (limited to '0014')
| -rw-r--r-- | 0014/main.pas | 65 |
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. |
