• 二分(求l-r中的平方数)


    题目描述

    多次查询[l,r]范围内的完全平方数个数
    定义整数x为完全平方数当且仅当可以找到整数y使得y*y=x
    输入描述:
    第一行一个数n表示查询次数
    之后n行每行两个数l,r
    输出描述:
    对于每个查询,输出一个数表示答案
    示例1

    输入
    5
    1 3
    1 4
    2 4
    4 4
    1 1000000000
     
    输出
    1
    2
    1
    1
    31622
     

    备注:
    n <= 100000
    0<= l <= r <= 1000000000
    解题思路:暴力肯定会超时,所以很容易想到二分
     
    #include<math.h>
    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    int a[40000],len;
    void init(){
        len=sqrt(1000000000.0)+1;
        for(int i=1;i<=len;i++)//先打表
            a[i]=i*i;
    }
    int binary_search(int key){
        int left=0,right=len,mid,ans;
        while(left<=right){
            mid=(left+right)/2;
            if(a[mid]<=key){
                ans=mid;
                left=mid+1;
            }
            else
                right=mid-1;
        }
        return ans;
    }
    int main()
    {
        init();
        int n,l,r;
        scanf("%d",&n);
        while(n--)
        {
            scanf("%d%d",&l,&r);
            int x=binary_search(l);
            printf("%d
    ",x);
            int y=binary_search(r);
            printf("%d
    ",y);
            int ans=y-x+1;
            int t=sqrt(l*1.0);
            if(t*t!=l) //因为l是不是平方数,对最后结果有影响
            ans--;
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    python操作MongoDB(API)
    jQuery插件—validation实现表单校验
    jquery实现下拉列表二级联动
    OSPF配置(H3C)
    OSPF区域
    OSPF路由协议
    直连路由和静态路由
    IP路由原理
    RIP路由协议
    deepin安装VMware workstation
  • 原文地址:https://www.cnblogs.com/lipu123/p/12150059.html
Copyright © 2020-2023  润新知