(ファイルIO):入力:search.in出力:search.out
制限時間:1000msのスペースの制約:262144キロバイトの特定の制限
後藤ProblemSet
タイトル説明
牛は牧場の周りの地形を探索するのが好きです。まず、すべての
のみ牛から始まるが、交差点、それは別の交差点になると前進するために、2つの部分(空でない)、各パートに分割され、そのように、二つの部分に分割されてもよい牛の群れに直面したときダウンを繰り返します。道路が新しいフォークの完全であると仮定すると、最終的にはチームに分かれていたどのくらいの計算。
入力
最初に
行目:2スペースで区切られた整数:
、請求
2つのチームが違いを分割乳牛の数を表します。
輸出
行:整数出力チームの最終的な数。
サンプル入力
62
サンプル出力
3
データ範囲の制限
ヒント
説明を入力します:あり
牛、乳牛ときに、2つのチームスプリットの違い
。
出力説明:3は、最終的に偶発的です
6
/ \
24
/
13
のそれぞれの数
。
問題解決のためのアイデアは、
直接2つのチーム、再帰大きな数字と小数点以下の道路で、すべてのフォークを列挙することができます。
そして問題差式:
二つの数より多く:(多数)=(+との差)/ 2の
2つの小さな番号:( 10進数)=(及び-差)/ 2
コード
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int n,k,ans;
void dfs(int s)
{
if(s>k&&(s-k)%2==0&&(s+k)%2==0)
{
ans++;
dfs((s-k)/2);
dfs((s+k)/2);
}
}
int main(){
freopen("search.in","r",stdin);
freopen("search.out","w",stdout);
scanf("%d%d",&n,&k);
dfs(n);
printf("%d",ans+1);
}