aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaphael McSinyx <vn.mcsinyx@gmail.com>2017-08-15 20:49:11 +0700
committerRaphael McSinyx <vn.mcsinyx@gmail.com>2017-08-15 20:49:11 +0700
commitf7f3efd3f0c2634d741bcbf3b5639c1ba6b8c40f (patch)
treee0c49ed707c51033393f4f416ce804912ea769ab
parentdbeda825d396deff88ac6754b20c084bd77510b7 (diff)
downloadcp-f7f3efd3f0c2634d741bcbf3b5639c1ba6b8c40f.tar.gz
Add 12/QG-2008/seqgame.cpp
-rw-r--r--12/QG-2008/README.md36
-rw-r--r--12/QG-2008/seqgame.cpp59
2 files changed, 95 insertions, 0 deletions
diff --git a/12/QG-2008/README.md b/12/QG-2008/README.md
new file mode 100644
index 0000000..4327b5d
--- /dev/null
+++ b/12/QG-2008/README.md
@@ -0,0 +1,36 @@
+# KÌ THI CHỌN HỌC SINH GIỎI QUỐC GIA THPT NĂM 2008
+
+## Trò chơi với dãy số
+
+Hai bạn học sinh trong lúc nhàn rỗi nghĩ ra trò chơi sau đây. Mỗi bạn chọn
+trước một dãy số gồm n số nguyên. Giả sử dãy số mà bạn thứ nhất chọn là:
+b<sub>1</sub>, b<sub>2</sub>, …, b<sub>n</sub>; còn dãy số mà bạn thứ hai chọn
+là: c<sub>1</sub>, c<sub>2</sub>, …, c<sub>n</sub>. Mỗi lượt chơi mỗi bạn đưa
+ra một số hạng trong dãy số của mình. Nếu bạn thứ nhất đưa ra số hạng
+b<sub>i</sub> (1 ≤ i ≤ n), còn bạn thứ hai đưa ra số hạng c<sub>j</sub> (1 ≤ j
+≤ n) thì giá của lượt chơi đó sẽ là |b<sub>i</sub> + c<sub>j</sub>|.
+
+### Yêu cầu
+
+Hãy xác định giá nhỏ nhất của một lượt chơi trong số các lượt chơi có thể.
+
+### Dữ liệu
+
+* Dòng đầu tiên chứa số nguyên dương n (n ≤ 10000);
+* Dòng thứ hai chứa dãy số nguyên b<sub>1</sub>, b<sub>2</sub>, …,
+ b<sub>n</sub> (|b<sub>i</sub>| ≤ 10<sup>9</sup>, i = 1, 2, …, n);
+* Dòng thứ ba chứa dãy số nguyên c<sub>1</sub>, c<sub>2</sub>, …,
+ c<sub>n</sub> (|c<sub>i</sub>| ≤ 10<sup>9</sup>, i = 1, 2, …, n);
+* Hai số liên tiếp trên một dòng được ghi cách nhau bởi dấu cách.
+
+### Kết quả
+
+Ghi ra giá nhỏ nhất tìm được.
+
+### Ví dụ
+
+| SEQGAME.INP | SEQGAME.OUT |
+| ---------------- | :---------: |
+| 2<br>1 -2<br>2 3 | 0 |
+
+*60% số tests ứng với 60% số điểm của bài có 1 ≤ n ≤ 1000.*
diff --git a/12/QG-2008/seqgame.cpp b/12/QG-2008/seqgame.cpp
new file mode 100644
index 0000000..b1751c7
--- /dev/null
+++ b/12/QG-2008/seqgame.cpp
@@ -0,0 +1,59 @@
+#include <iostream>
+#include <fstream>
+#include <set>
+
+#define ABS(x) ((x < 0) ? -x : x)
+
+using namespace std;
+
+int
+main()
+{
+ ifstream infile;
+ ofstream outfile;
+ short n;
+ long i, c, min = 2e9, a;
+ set<long> b;
+ std::set<long>::iterator k;
+
+ infile.open("SEQGAME.INP");
+ infile >> n;
+ for (i = 0; i < n; i++)
+ {
+ infile >> c;
+ b.insert(c);
+ }
+
+ for (; n--;)
+ {
+ infile >> c;
+ k = b.lower_bound(-c);
+ if (*k == -c)
+ {
+ min = 0;
+ break;
+ }
+
+ if (k != b.end())
+ {
+ i = ABS(*k + c);
+ if (a < min)
+ min = i;
+ }
+
+ if (k != b.begin())
+ {
+ k--;
+ i = ABS(*k + c);
+ if (a < min)
+ min = i;
+ }
+ }
+ infile.close();
+
+ outfile.open("SEQGAME.OUT");
+ outfile << min << endl;
+ outfile.close();
+
+ return 0;
+}