零点工作室暑假集训(AtCoder--ABC285)

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个用户。每个用户都想改自己的名字从s_i改成t_i

  • 你每次只能改一个用户的名字
  • 你每次也只能把一个用户的名字改一次
  • 名字不能重复

问你能不能在满足上面三个条件的情况下,把所有用户的名字改成他们想要的。

能输出“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;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值