1457 -- 探索的奶牛

项目场景:

Time Limit:200 ms
Memory Limit:128 MB
Case score:10
Level:2
Type:Traditional Problem
Validator:Generic Comparsion

问题描述

1457 -- 探索的奶牛

Description

FJ 的奶牛喜欢探索农场周围的地形。一开始,所有 NN 只奶牛一起出发,但当碰到路口时,这一群牛可能会分成两部分,每一部分都不能为空且两部分的人数差恰为 KK,分组后每一部分都继续前进,当碰到另一个路口时,再分成两部分,如此反复下去……
假设一路上到处都是新的岔口,计算最终被分成多少支队伍。

Input

输入一行,用两个用空格隔开的整数 NN 和 KK。

Output

输出一行,一个整数表示最终的队伍数。

Sample Input

6 2

Sample Output

3

Sample Explanation

样例中有 66 只奶牛,分裂时两个小组的人数差为 22, 最终有 33 支队伍分别为(数量分别为 2,1,32,1,3 )。

Hint

100\%100%的数据:1≤N≤10^91≤N≤109。

 AC代码:

#include<bits/stdc++.h>
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
using namespace std;
long long n,k,ans=1;
inline void dfs(long long val){
    if(val==0) return ;
    if((val+k)%2==0&&val-k>0){
        ans++;
        dfs((val+k)/2);
        dfs((val-k)/2);
    }
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>k;
    dfs(n);
    cout<<ans;
    return 0;
}

原因分析:

用数学,dfs


解决方案:

思考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值