about summary refs log tree commit diff
path: root/12/TP-HN-2009/R1
diff options
context:
space:
mode:
authorRaphael McSinyx <vn.mcsinyx@gmail.com>2016-11-06 11:13:14 +0700
committerRaphael McSinyx <vn.mcsinyx@gmail.com>2016-11-06 11:13:14 +0700
commit7de121c4b4ef888a0d1990c27144a7f9dd8c5f94 (patch)
tree2a298c9a957ad490cf8251ab264413f4effa9dce /12/TP-HN-2009/R1
parente4767bb46d1d759f9c863704e3f347d2a0c8c49a (diff)
downloadcp-7de121c4b4ef888a0d1990c27144a7f9dd8c5f94.tar.gz
Thêm đề HSG 12 huyện Vĩnh Tường, Vĩnh Phúc
Diffstat (limited to '12/TP-HN-2009/R1')
-rwxr-xr-x12/TP-HN-2009/R1/BTN.PAS87
-rwxr-xr-x12/TP-HN-2009/R1/HEXA.PAS75
-rwxr-xr-x12/TP-HN-2009/R1/PS.PAS80
-rwxr-xr-x12/TP-HN-2009/R1/R1.pdfbin0 -> 65142 bytes
4 files changed, 242 insertions, 0 deletions
diff --git a/12/TP-HN-2009/R1/BTN.PAS b/12/TP-HN-2009/R1/BTN.PAS
new file mode 100755
index 0000000..dbb022d
--- /dev/null
+++ b/12/TP-HN-2009/R1/BTN.PAS
@@ -0,0 +1,87 @@
+type sni = record
+  s : ansistring;
+  n : integer
+end;
+
+var
+  f : text;
+  s : ansistring;
+  op, cl : integer;
+  c : char;
+
+function cal(s : ansistring) : integer;
+  var
+    c : char;
+    tmp : integer = 0;
+  begin
+    cal := 0;
+    for c in s do
+      if c = '(' then
+        begin
+          inc(tmp);
+          if tmp > cal then
+            cal := tmp
+        end
+      else
+        begin
+          dec(tmp);
+          if tmp < 0 then exit(0)
+        end;
+    if tmp <> 0 then
+      exit(0)
+  end;
+
+function rplc(
+  s : ansistring;
+  c : char;
+  idx : integer
+) : ansistring;
+  begin
+    exit(copy(s, 1, idx - 1) + c + copy(s, idx + 1, length(s) - idx + 1))
+  end;
+
+function libtn(
+  s : ansistring;
+  op, cl, idx : integer
+) : sni;
+  var
+    i : integer;
+    v0, v1 : sni;
+  begin
+    if (op = 0) and (cl = 0) then
+      begin
+        libtn.s := s;
+        libtn.n := cal(s);
+        exit
+      end;
+    i := idx;
+    while s[i] <> '?' do
+      inc(i);
+    if op = 0 then
+      exit(libtn(rplc(s, ')', i), 0, cl - 1, i + 1));
+    if cl = 0 then
+      exit(libtn(rplc(s, '(', i), op - 1, 0, i + 1));
+    v0 := libtn(rplc(s, '(', i), op - 1, cl, i + 1);
+    v1 := libtn(rplc(s, ')', i), op, cl - 1, i + 1);
+    if v0.n > v1.n then
+      exit(v0)
+    else exit(v1)
+  end;
+
+begin
+  assign(f, 'BTN.INP');
+  reset(f);
+  read(f, s);
+  close(f);
+  op := length(s) div 2;
+  cl := length(s) div 2;
+  for c in s do
+    if c = '(' then
+      dec(op)
+    else if c = ')' then
+      dec(cl);
+  assign(f, 'BTN.OUT');
+  rewrite(f);
+  writeln(f, libtn(s, op, cl, 1).s);
+  close(f)
+end.
diff --git a/12/TP-HN-2009/R1/HEXA.PAS b/12/TP-HN-2009/R1/HEXA.PAS
new file mode 100755
index 0000000..a2fd6ca
--- /dev/null
+++ b/12/TP-HN-2009/R1/HEXA.PAS
@@ -0,0 +1,75 @@
+var
+  f : text;
+  n, n0, m, i, j, tmp : longint;
+  s : string;
+
+function dec2hex(deca : longint) : string;
+  var
+    a : array[0..7] of byte;
+    i, j : byte;
+  begin
+    dec2hex := '';
+    i := 0;
+    while deca > 0 do
+      begin
+        a[i] := deca mod 16;
+        deca := deca div 16;
+        inc(i)
+      end;
+    dec(i);
+    for j := i downto 0 do
+      case a[j] of
+        0 : dec2hex := dec2hex + '0';
+        1 : dec2hex := dec2hex + '1';
+        2 : dec2hex := dec2hex + '2';
+        3 : dec2hex := dec2hex + '3';
+        4 : dec2hex := dec2hex + '4';
+        5 : dec2hex := dec2hex + '5';
+        6 : dec2hex := dec2hex + '6';
+        7 : dec2hex := dec2hex + '7';
+        8 : dec2hex := dec2hex + '8';
+        9 : dec2hex := dec2hex + '9';
+        10 : dec2hex := dec2hex + 'A';
+        11 : dec2hex := dec2hex + 'B';
+        12 : dec2hex := dec2hex + 'C';
+        13 : dec2hex := dec2hex + 'D';
+        14 : dec2hex := dec2hex + 'E';
+        15 : dec2hex := dec2hex + 'F'
+      end
+  end;
+
+begin
+  assign(f, 'HEXA.INP');
+  reset(f);
+  read(f, n);
+  close(f);
+  m := n;
+  i := 0;
+  while m > 0 do
+    begin
+      inc(i);
+      tmp := 1;
+      for j := 1 to i - 1 do tmp := tmp * 16;
+      m := m + i * (tmp - tmp * 16)
+    end;
+  m := i;
+  for i := 1 to m - 1 do
+    begin
+      tmp := 1;
+      for j := 1 to i - 1 do tmp := tmp * 16;
+      n := n + i * (tmp - tmp * 16)
+    end;
+  n0 := (n + m - 1) div m;
+  for i := 1 to m - 1 do
+    begin
+      tmp := 1;
+      for j := 1 to i - 1 do tmp := tmp * 16;
+      n0 := n0 + tmp * 16 - tmp
+    end;
+    s := dec2hex(n0);
+  if n mod m > 0 then m := n mod m;
+  assign(f, 'HEXA.OUT');
+  rewrite(f);
+  writeln(f, s[m]);
+  close(f)
+end.
diff --git a/12/TP-HN-2009/R1/PS.PAS b/12/TP-HN-2009/R1/PS.PAS
new file mode 100755
index 0000000..6cf2d09
--- /dev/null
+++ b/12/TP-HN-2009/R1/PS.PAS
@@ -0,0 +1,80 @@
+var
+  f : text;
+  m, n : byte;
+  k, i, j, l, gcd0 : integer;
+  a, b : array[1..30] of integer;
+  c : array[0..1, 1..900] of integer;
+
+function gcd(d, e : integer) : integer;
+  var tmp : integer;
+  begin
+    while d > 0 do
+      begin
+        tmp := d;
+        d := e mod d;
+        e := tmp
+      end;
+    gcd := e
+  end;
+
+procedure qsort(b, e: integer);
+  var i, j, x, tmp: integer;
+  begin
+    i := b;
+    j := e;
+    x := (b + e) div 2;
+    repeat
+      while c[0, i] * c[1, x] < c[0, x] * c[1, i] do inc(i);
+      while c[0, x] * c[1, j] < c[0, j] * c[1, x] do dec(j);
+      if i <= j then
+        begin
+          tmp := c[0, i];
+          c[0, i] := c[0, j];
+          c[0, j] := tmp;
+          tmp := c[1, i];
+          c[1, i] := c[1, j];
+          c[1, j] := tmp;
+          inc(i);
+          dec(j)
+        end
+    until i > j;
+    if b < j then qsort(b, j);
+    if i < e then qsort(i, e)
+  end;
+
+begin
+  assign(f, 'PS.INP');
+  reset(f);
+  read(f, m, n, k);
+  for i := 1 to m do read(f, a[i]);
+  for i := 1 to n do read(f, b[i]);
+  close(f);
+  l := 0;
+  for i := 1 to m do
+    for j := 1 to n do
+      begin
+        inc(l);
+        gcd0 := gcd(a[i], b[j]);
+        c[0, l] := a[i] div gcd0;
+        c[1, l] := b[j] div gcd0
+      end;
+  qsort(1, l);
+  i := 1;
+  while i < l do
+    begin
+      inc(i);
+      if c[0, i] * c[1, i - 1] = c[0, i - 1] * c[1, i] then
+        begin
+          dec(l);
+          for j := i to l do
+            begin
+              c[0, j] := c[0, j + 1];
+              c[1, j] := c[1, j + 1]
+            end
+        end
+    end;
+  assign(f, 'PS.OUT');
+  rewrite(f);
+  writeln(f, c[0, k], ' ', c[1, k]);
+  close(f)
+end.
diff --git a/12/TP-HN-2009/R1/R1.pdf b/12/TP-HN-2009/R1/R1.pdf
new file mode 100755
index 0000000..b0834b3
--- /dev/null
+++ b/12/TP-HN-2009/R1/R1.pdf
Binary files differ