NC21660. Love Live! 南琴梨篇
描述
"我成为夹心饼干了!"Kotori 说道。Honaka 和 Umi 又吵架了。
"我再也不理小海了!" Honaka 大喊。
"我再也不理穗乃果了!" Umi 也喊道。
现在,Kotori 想让 Honaka 和 Umi 和好,只要 Kotori 站在 Honaka 和 Umi 的 LCA(最近公共祖先) 位置上就可以了!请你帮她求出 Kotori 站的位置,或者告诉她根本不存在这样的位置。
输入描述
第一行一个整数T表示测试组数。(T ≤ 100)
接下来T行,每行三个整数。
第一个整数表示这棵树是一棵K (K ≤ 9)叉树,后面两个数表示Honaka和Umi所在的节点编号。
注意结点编号已经转换为K进制。转换成K进制以后,每个串的长度不超过1000。
输出描述
对于每个输入,输出一行。
如果Kotori可以站在LCA的位置上,请在K进制下输出这个位置,
否则请告诉Kotori不存在这样的位置,输出`I'm sorry, KOTORI!`。(推荐复制样例)
示例1
输入:
2 2 101 111 3 21 12
输出:
1 I'm sorry, KOTORI!
说明:
对于样例2,这棵K叉树如图所示。Honaka位于7号点,Umi位于5号点,不存在这样的`LCA`满足题意。
C(clang 3.9) 解法, 执行用时: 2ms, 内存消耗: 228K, 提交时间: 2018-12-08 17:43:41
#include <stdio.h> #include <string.h> int main() { int a, b, i, j, k, m, n; char x[1001], y[1001]; scanf("%d", &a); for (i = 1; i <= a; i++) { n = 1; scanf("%d", &m); scanf("%s", x); scanf("%s", y); b = strlen(x); for (j = 0; j < b; j++) { if (x[j] - '0' > m - 1) { n = 0; break; } if (x[j] != y[j]) break; } if (j == 0 || n == 0) printf("I'm sorry, KOTORI!"); else for (k = 0; k < j; k++) putchar(x[k]); printf("\n"); } return 0; }
C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 604K, 提交时间: 2018-12-08 19:15:27
#include <iostream> #include <cstring> using namespace std; int main() { char a[1005], b[1005]; int t; scanf("%d", &t); while (t--) { scanf("%*d%s%s", a, b); for (int i = 0; i < strlen(a); i++) { if (a[i] != b[i]) { if (i == 0) printf("I'm sorry, KOTORI!"); break; } printf("%c", a[i]); } printf("\n"); } }
C++11(clang++ 3.9) 解法, 执行用时: 7ms, 内存消耗: 360K, 提交时间: 2020-03-26 14:28:33
#include<iostream> using namespace std; int main() { int n, k; string s, t; cin >> n; while(n--) { cin >> k >> s >> t; for (int i = 0; i < s.size() && i < t.size(); i++) { if(s[i] != t[i]) { if(!i) cout << "I'm sorry, KOTORI!" ; break; } else cout << s[i]; } cout << endl; } }