列表

详情


NC21660. Love Live! 南琴梨篇

描述

"我成为夹心饼干了!"Kotori 说道。Honaka Umi 又吵架了。

"我再也不理小海了!" Honaka 大喊。

"我再也不理穗乃果了!" Umi 也喊道。

她们三个现在位于 K(totri) 叉树上。叉树上有k-1个根,它们的编号为 1, 2, ..., K - 1。如果一个点的编号为 x ,它的儿子的编号为 Kx, Kx + 1, ..., Kx + K - 1 。例如, K=3 的树如下所示。`...` 表示剩下的点。

现在,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!

说明:

对于样例1,这棵K叉树如图所示。橙色点表示Honaka的位置,浅蓝色点表示Umi的位置,灰色点表示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;
  }
}

上一题