Fishermen Gym - 101964E(二分+前缀数组)

**题目链接:**https://vjudge.net/problem/Gym-101964E

**题意:**有n只鱼,m个钓鱼的人,每条鱼有一个x和y坐标,每个人只有一个x坐标,y坐标等于0,当 |鱼.x-人.x|+鱼.y<=l,这个人就可以钓到这条鱼,问你每个人最多能钓到几条鱼。

**分析:**按x坐标对每个人从小到大排序,然后遍历每条鱼,每条鱼都有一个能被钓到的上下界x坐标,lower_bound查找下界x坐标在人数组的位置,upper_bound查找上界x坐标在人数组的位置。详情见代码。

#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

using namespace std;

const int maxn =200000+100;

struct fish
{
    int x,y;
}a[maxn];

struct fisher
{
    int  x,id;
    bool operator < (const fisher& rhs)const {
        return x < rhs.x;
    }
}b[maxn];


int main()
{
    int n,m,l;
    int ans[maxn],sum[maxn];

    while(scanf("%d %d %d",&n,&m,&l)!=EOF)
    {
        memset(sum,0,sizeof(sum));

        for(int i=0; i<n; i++)
            scanf("%d %d",&a[i].x,&a[i].y);
        for(int i=1; i<=m; i++)
        {
            scanf("%d",&b[i].x);
            b[i].id=i;
        }
        sort(b+1,b+m+1);

        for(int i=0; i<n; i++)
        {
            if(a[i].y>l)
                continue;
            int left,right;
            fisher tmp;
            tmp.x=a[i].x+a[i].y-l;
            left=lower_bound(b+1,b+m+1,tmp)-b;

            tmp.x=a[i].x-a[i].y+l;
            right=upper_bound(b+1,b+m+1,tmp)-b;

            sum[left]++;
            sum[right]--;
        }

        for(int i=1; i<=m; i++)
        {
            sum[i]+=sum[i-1];
            ans[b[i].id]=sum[i];

        }

        for(int i=1; i<=m; i++)
            printf("%d\n",ans[i]);
    }

    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
错误创建目录。这个错误通常出现在数据库启动或保存查询语句时。根据引用\[1\]和引用\[2\]的信息,这个错误可能是由于指定的目录不存在或无法创建导致的。在引用\[2\]中提到,在Navicat上解决这个问题的方法是通过编辑连接的高级设置来更改目录地址。同样,在引用\[3\]中也提到了类似的问题,当搭建数据库的备库时,可能会出现这个错误。在这种情况下,需要检查备库的参数文件是否正确配置,并确保指定的目录存在。如果目录不存在,可以尝试手动创建它。总之,错误创建目录的原因可能是由于目录不存在或权限不足导致的,解决方法是更改目录地址或手动创建目录。 #### 引用[.reference_title] - *1* *3* [诡异的错误:ORA-48141: error creating directory during ADR initialization--原来是单引号惹的祸](https://blog.csdn.net/qianglei6077/article/details/89011380)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [保存SQL语句,遇见Navicat for MySQL Error creating directory](https://blog.csdn.net/Fishermen_sail/article/details/116599560)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值