搜索。。。
Solve this interesting problemTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 422Accepted Submission(s): 98
Problem Description
Have you learned something about segment tree? If not, don’t worry, I will explain it for you.Segment Tree is a kind of binary tree, it can be defined as this:- For each node u in Segment Tree, u has two values:.- If, u is a leaf node.- If, u has two children x and y,with,.Here is an example of segment tree to do range query of sum.
Given two integers L and R, Your task is to find the minimum non-negative n satisfy that: A Segment Tree with root node’s valuecontains a node u with.
Input
The input consists of several test cases.Each test case contains two integers L and R, as described above.
Output
For each test, output one line contains one integer. If there is no such n, just output -1.
Sample Input
6 710 1310 11
Sample Output
7-112
Source
#include <bits/stdc++.h>using namespace std;typedef long long ll;#define prt(k) cout<<#k" = "<<k<<endl;const ll inf = 1e18;ll ans;void dfs(ll L, ll R){if (R>=ans) return;if (L < 0) return;if(L==0) {ans = R;return;}if (R – L + 1 > L) return;dfs(2*L – R – 1, R);dfs(2*L – R – 2, R);dfs(L, 2*R – L);dfs(L, 2*R – L + 1);}ll L, R;int main(){while (cin>>L>>R){ans = inf;dfs(L, R);if (ans == inf) ans = -1;cout<<ans<<endl;}}
版权声明:本文为博主原创文章,,未经博主允许不得转载。
别人失去了信心,他却下决心实现自己的目标。