zoukankan      html  css  js  c++  java
  • 多校 hdu

    Solve this interesting problem

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 1571    Accepted Submission(s): 454


    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: Lu and Ru.
    - If Lu=Ru, u is a leaf node. 
    - If LuRu, u has two children x and y,with Lx=Lu,Rx=Lu+Ru2,Ly=Lu+Ru2+1,Ry=Ru.
    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 value Lroot=0 and Rroot=n contains a node u with Lu=L and Ru=R.
     

    Input
    The input consists of several test cases. 
    Each test case contains two integers L and R, as described above.
    0LR109
    LRL+12015
     

    Output
    For each test, output one line contains one integer. If there is no such n, just output -1.
     

    Sample Input
    6 7 10 13 10 11
     

    Sample Output
    7 -1 12
     

    Source
     

    Recommend
    wange2014   |   We have carefully selected several similar problems for you:  5326 5325 5324 5322 5321 
     


    #include<cstdio>
    #include<cmath>
    #include<stdlib.h>
    #include<map>
    #include<set>
    #include<time.h>
    #include<vector>
    #include<queue>
    #include<string>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define eps 1e-8
    #define INF 0x3f3f3f3f
    #define LL long long
    #define max(a,b) ((a)>(b)?(a):(b))
    #define min(a,b) ((a)<(b)?(a):(b))
    
    
    LL L, R;
    LL flag;
    
    void dfs(LL l, LL r)
    {
        if((flag && r >= flag))  return ;
        if(l == 0)
            {
                flag == 0 ? flag = r : flag = min(flag, r);
                return ;
            }
        long long  t = r - l + 1;
        if(t <= l)
        {
            dfs(l - t - 1, r);
            dfs(l - t, r);
            dfs(l, r + t - 1);
            dfs(l, r + t);
        }
    }
    
    int main()
    {
        while(~scanf("%I64d%I64d", &L, &R))
        {
            flag = 0;
            if(R == 0)
            printf("0
    ");
            else
            {
                dfs(L, R);
                if(flag)
                printf("%I64d
    ", flag);
                else
                printf("-1
    ");
            }
        }
        return 0;
    }
    


  • 相关阅读:
    单独的数字
    设计模式之原型模式
    设计模式之策略模式
    设计模式之单例模式
    泛型入门
    iOS中关于.pch的新建与配置问题
    iOS开发中遇到的头文件找不到的问题解决办法
    iOS中NSJSONSerialization的使用 小记
    6.线程、进程、协程基础篇
    5.装饰器进阶篇
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8289104.html
Copyright © 2011-2022 走看看