项目场景:
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
解决方案:
思考