美文网首页
Gym 100676E 微见解 二分思想题

Gym 100676E 微见解 二分思想题

作者: Anxdada | 来源:发表于2017-02-11 11:22 被阅读0次

链接
题意: 题意很简单,给定一个数组,问从这个数组中任意抽两个元素,要求这两个元素的绝对值之差小于32,问有多少种方法(不管顺序问题,即1和16算一种方式,没有16和1了).

思路: 第一反应是暴力每一种情况,复杂度为O(n^2)(应该吧),看给的数据范围,肯定会爆.所以就要换种方式,回到未知式|x-y|<32.x为已知数,y为满足条件的数,则y满足x-32<y<x+32,于是我的想法是将给定的数组进行排序然后找到与这个数满足条件的上限数,即这个数+32,因为是排好序(从小到大)的所以可以不用管下限,找到这个数的位置为了防止爆,就用二分法.

代码如下:

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int arr[10005];
int n;
int Find(int x)
{
    int low=0,high=n,mid;
    while(low<high)
    {
        mid=(low+high)/2;
        if(arr[mid]>=x)  high=mid;
        else  low=mid+1;
    }
    return low;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(int i=0;i<n;i++){
            scanf("%d",&arr[i]);
        }
        sort(arr,arr+n);
        int ans=0,tmp;
        for(int i=0;i<n;i++){
            tmp=Find(arr[i]+32);
            ans+=tmp-i-1;//这个需要注意下
        }
        printf("%d\n",ans);
    }
}

相关文章

  • Gym 100676E 微见解 二分思想题

    链接题意: 题意很简单,给定一个数组,问从这个数组中任意抽两个元素,要求这两个元素的绝对值之差小于32,问有多少种...

  • 题目整理2

    这个月内的一些有趣的题 Letter Array http://codeforces.com/gym/100482...

  • Gym gym

    自从加入新的健身房之后,坚持一周三次上不同的力量训练和举铁高强度课,还尝试了拳击课和打击棍子的pound;四个星期...

  • Fastlane - gym

    认识Xcodebuild命令 gym概述: 使用方法: fastlane gym fastlane gym --w...

  • BinarySearch二分查找

    二分思想 1. 二分的前置条件 存储在数组中 有序排列 2. 二分的思想 对于数组 [low] -> [high]...

  • LeetCode 专题 :二分查找

    LeetCode 第 704 题是二分查找的模板问题。 LeetCode 第 704 题:二分查找 传送门:704...

  • OpenAI Gym介绍及安装

    OpenAI Gym学习求助,安装openai gym all老是出错?

  • 15/70 豆苗写作:My gym class

    Every Monday evening I have a gym class at the Little Gym...

  • 分治算法(swift二分法排序递归实现)

    二分查找 1、二分查找(Binary Search) 2、二分查找的基本思想 swift算法实现

  • 33. 搜索旋转排序数组 Python

    思路:首先了解到这道题要求的解法是log(n)级别。log(n)与什么最像?当然是二分的思想!但是很多朋友可能会说...

网友评论

      本文标题:Gym 100676E 微见解 二分思想题

      本文链接:https://www.haomeiwen.com/subject/crznittx.html