diff --git a/P17827.cpp b/P17827.cpp new file mode 100644 index 0000000..5e4fde6 --- /dev/null +++ b/P17827.cpp @@ -0,0 +1,24 @@ +#include +using namespace std; +int side(char c) { + if (c == 'A' || c == 'B' || c == 'C') return 0; + return 1; +} +int pos(char c) { + if (c == 'A') return 0; + if (c == 'B') return 1; + if (c == 'C') return 2; + if (c == 'D') return 0; + return 1; // 'F' +} +int main() { + string c1, s1, c2, s2; + cin >> c1 >> s1 >> c2 >> s2; + bool ans1 = (c1 == c2); + bool ans2 = ans1 && (s1.substr(0, 2) == s2.substr(0, 2)); + char a = s1[2], b = s2[2]; + bool ans3 = ans2 && (side(a) == side(b)); + bool ans4 = ans3 && (abs(pos(a) - pos(b)) == 1); + cout << ans1 << ans2 << ans3 << ans4 << '\n'; + return 0; +} \ No newline at end of file diff --git a/P17827.md b/P17827.md new file mode 100644 index 0000000..56253cc --- /dev/null +++ b/P17827.md @@ -0,0 +1,137 @@ +# P17827 [CSP-J 2026] 旅游 / travel(民间数据) + +## 题目描述 + +小 R 和小 X 准备坐高铁出门旅游。他们买了两张二等座车票,车票上写着各自的车厢号和座位号。两人希望座位相邻,这样旅途中可以坐在一起。 + +他们乘坐的列车由 $17$ 节车厢组成,车厢编号是 `01` 到 `17`。其中,`01` 和 `16` 号车厢是一等座车厢,其余车厢是二等座车厢。两人买的都是二等座车票,座位都在二等座车厢中。每节二等座车厢共有 $18$ 排,每排有 $5$ 个座位。座位号由两位排号和一位大写字母组成,例如 `03C` 表示第 $3$ 排 C 座。每一排的座位按照从左到右的顺序排列,座位字母依次是 `A`、`B`、`C`、`D`、`F`,其中 C 座与 D 座之间是过道,即每排过道左侧的座位序列是 `A`、`B`、`C`,右侧是 `D`、`F`。以下是一节二等座车厢的座位示意图: + +:::align{center} +![](https://cdn.luogu.com.cn/upload/image_hosting/hj5s80cz.webp) +::: + +两个座位相邻,当且仅当在同一节车厢的同一排,位于过道的同一侧,且在该侧的座位序列中相邻。 + +你需要帮助小 R 依次判断: + +- 两张车票对应的座位是否在同一节车厢; +- 两张车票对应的座位是否在同一节车厢的同一排; +- 两张车票对应的座位是否在同一节车厢的同一排,且位于过道的同一侧; +- 两张车票对应的座位是否相邻。 + +## 输入格式 + +从文件 `travel.in` 中读入数据。 + +输入的第一行包含四个字符串 $c_1,s_1,c_2,s_2$,分别表示小 R 的车票上的车厢号、座位号,以及小 X 的车票上的车厢号、座位号。 + +## 输出格式 + +输出到文件 `travel.out` 中。 + +输出一行一个长度为 $4$ 的 `01` 字符串,分别表示四个问题的答案,其中 `1` 代表是,`0` 代表否。 + +## 输入输出样例 #1 + +### 输入 #1 + +``` +02 01A 02 01B +``` + +### 输出 #1 + +``` +1111 +``` + +## 输入输出样例 #2 + +### 输入 #2 + +``` +02 01C 02 01A +``` + +### 输出 #2 + +``` +1110 +``` + +## 输入输出样例 #3 + +### 输入 #3 + +``` +02 01C 02 01D +``` + +### 输出 #3 + +``` +1100 +``` + +## 输入输出样例 #4 + +### 输入 #4 + +``` +02 02B 02 01A +``` + +### 输出 #4 + +``` +1000 +``` + +## 输入输出样例 #5 + +### 输入 #5 + +``` +02 01A 03 01A +``` + +### 输出 #5 + +``` +0000 +``` + +## 说明/提示 + +### 样例 1 解释 + +`02` 号车厢是二等座车厢。`01A` 和 `01B` 在同一节车厢、同一排、过道的同一侧,并且相邻,因此输出 `1111`。 + +### 样例 2 解释 + +两个座位在同一节车厢、同一排、过道的同一侧,但 `01C` 与 `01A` 中间隔着 `01B`,不相邻,因此输出 `1110`。 + +### 数据范围 + +对于所有测试数据,均有: + +- $c_1,c_2$ 是 `01` 到 `17` 之间除 `01` 和 `16` 外的两位车厢号; +- $s_1,s_2$ 是对应车厢中的合法座位号,即前两位是 `01` 到 `18` 之间的排号,末位是 `A`、`B`、`C`、`D`、`F` 中的一个字母; +- 两张车票对应的不是同一个座位,即 $c_1\ne c_2$ 或 $s_1\ne s_2$。 + +::cute-table{tuack} +| 测试点编号 | 特殊性质 | +| :-: | :-: | +| $1\sim 4$ | A, B, C | +| $5\sim 10$ | A, B | +| $11\sim 14$ | A | +| $15\sim 17$ | D | +| $18\sim 20$ | 无 | + +特殊性质 A:两个座位在同一节车厢,即 $c_1=c_2$。 + +特殊性质 B:两个座位在同一排,即 $s_1$ 的前两位与 $s_2$ 的前两位相同。 + +特殊性质 C:两个座位在过道的同一侧。 + +特殊性质 D:小 R 的座位是 D 座,小 X 的座位是 F 座,即 $s_1$ 的末位字符是 `D`,$s_2$ 的末位字符是 `F`。 \ No newline at end of file