A - Edge Checker 2
在满二叉树中,判断两个两个点是否是父子关系,因为a < b,根据满二叉树的定义可知,a和b满足a * 2 == b || a * 2 + 1 == b
#include <iostream>
using namespace std;
int a, b;
int main()
{
cin >> a >> b;
if(a * 2 == b || a * 2 + 1 == b) cout << "Yes";
else cout << "No";
return 0;
}
B - Longest Uncommon Prefix
模拟,当s[i] == s[i + k]时或者i + k >= 字符串长度时,也就是当按顺序输出时出现第一个 = 时 break;输出此时的答案
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 5010;
int x, n, b[N];
int k = 1;
string s;
int main()
{
cin >> n >> s;
for(int j = 0; j < n - 1; j ++)
{
for(int i = 0; i + k < n; i ++)
{
if(s[i] != s[i + k])
{
b[j] ++;
}
else break;
}
k ++;
}
for(int j = 0; j < n - 1; j ++)
{
cout << b[j] << endl;
}
return 0;
}
C - abc285_brutmhyhiizp
题意
有n个用户。每个用户都想改自己的名字从改成
- 你每次只能改一个用户的名字
- 你每次也只能把一个用户的名字改一次
- 名字不能重复
问你能不能在满足上面三个条件的情况下,把所有用户的名字改成他们想要的。
能输出“Yes”,否则输出“No”
其实也就是该问题等价于将一个 26 进制数转化为 10 进制数。
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long LL;
string s;
LL res = 0, num = 0, add = 26;
int main()
{
cin >> s;
for(int i = 1; i <= s.size() - 1; i ++)
{
res += add;
add *= 26;
}
for(int i = 0; i < s.size(); i ++)
{
num *= 26;
num += (s[i] - 'A');
}
cout << res + num + 1 << endl;
return 0;
}