A—Edge Checker 2
题目大意
给你一棵树,输入两个 1 − 15 1 - 15 1−15 的数 a , b a, b a,b,求 a a a 是否是 b b b 老爹父亲
这颗树如图 :
题目解法
超级无敌暴力法(wu
一种最最最简单粗暴的方法就是把所有的关系存起来,然后每次输入都在这些里面搜一遍,有的话输出 Yes
,没有的话输出 No
。
由于过于粗暴,作者就不写了(wu
正常的解法
看到这棵树可以发现一个普通树的规律:
左孩子编号等于该节点编号乘二,
右孩子编号等于该节点编号乘二加一。
又因为如果有关系的话肯定是 a a a 是 b b b 的父亲,不可能是 b b b 是 a a a 的父亲 整时空穿越了。
所以答案就浮出水面了,我们只需要判断如下两个式子如果成立一个就是 Yes
,都不成立就是 No
。
b = a × 2 b = a \times 2 b=a×2
b = a × 2 + 1 b = a \times 2 + 1 b=a×2+1
标程
#include <bits/stdc++.h>
using namespace std;
int a, b;
int main() {
cin >> a >> b;
if (b == a * 2) {
cout << "Yes" << endl;
} else if (b == a * 2 + 1) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
return 0;
}
B—Longest Uncommon Prefix
题目大意
给你一个长为 N N N 的字符串 S S S ,让你求出对于每一个 i i i,求出最大的 j ( i + j ≤ N ) j(i + j \le N) j(i+j≤N),满足:
∀ k ≤ j , S k = S k + i \forall k \le j, S_k = S_{k + i} ∀k≤j,Sk=Sk+i
题目解法
暴力
看到题目第一眼想到的是枚举每一个i,j,与k,暴力求出答案。
代码:
看正解去!
<