AcWing——第69场周赛

AcWing——第69场周赛

4615. 相遇问题 - AcWing题库

问题解析

当两者的距离能被他们的速度之和整除时他们才能见到彼此。

AC代码

void solve()
{
    int n, m, a, b;
    cin >> n >> m >> a>> b;
    int x = m - n, y = a + b;
    if (x % y == 0)cout << x / y << endl;
    else cout << -1 << endl;
}

4616. 击中战舰 - AcWing题库

问题解析

我们已经知道,一个战舰会占据b个位置,我们攻击这b个格子中任意一个格子都可以击中战舰。

那么我们每连续b个格子就记录其中的一个坐标就行(我这里把坐标直接存入vector中),最后记录下来的v.size()个坐标中,藏有a个战舰。

我们要击中至少一个,那么假设前v.size()-a发都没中,那第v.size()-a+1发肯定就会打中一发,所以答案就是v.size()-a+1,把我们记录的坐标随便输出v.size()-a+1个就行

AC代码

void solve() {
    int n, a, b, k, cnt = 0;
    string s;
    cin >> n >> a >> b >> k >> s;
    vector<int>v;
    for (int i = 0; i < n; i++)
    {
        if (s[i] == '0')
        {
            cnt++;
            if (cnt == b)
            {
                v.push_back(i + 1);
                cnt = 0;
            }
        }
        else cnt = 0;
        
    }
    cout << v.size() - a + 1 << endl;
    for (int i = 0; i < v.size() - a + 1; i++)cout << v[i] << " ";
}

4617. 解方程 - AcWing题库

问题解析

原方程:a-(ax)-x=0**,转化一下就可变成**a-x=ax

即两个数的异或结果等于他们相减,那么我们就可以根据异或运算的性质来推断一下:

  1. 当a的二进制下第i位是0时,x的二进制第i位如果是1,那异或运算后结果显然会变大,所以只能是0。
  2. 当a的二进制下第i位是1时,x的二进制可以是1或者0:如果是1,异或后相当于进行减法运算;如果是0,异或后相当于没减掉。

那么:a的二进制下为0的位置,x二进制下也是0;a二进制下为1的位置,x的二进制下可以为1或0。

结果就有:2^(a二进制下1的个数)

AC代码

void solve()
{
    int n, cnt = 1;
    cin >> n;
    while (n)
    {
        if (n % 2 == 1)
            cnt *= 2;
        n /= 2;
    }
    cout << cnt << endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值