2021 ICPC新疆省赛 I - chino with mates ( 二分)

Chino held a blind date event, there are n male guests and m female
guests attending.

The personality characteristic value of each person can be represented
by an integer, the personality characteristic value of the i-th male
guest is ai , and the personality characteristic value of the j-th
female guest is bj

.

Chino believes that when the calculation result of the personality
characteristic values of two people ai×bj

in a certain range [l,r], the personality of two person is suitable each of them.

Chino would like to know how many matching combinations possible satisfied personality suitability between male and female guests.
Input

The first line contain two positive integers n,m(1≤n,m≤105)

The next line contain n integers ai(−109≤ai≤109)

indicates the personality characteristic value of the male guests.

Then the next line contain m integersbi(−109≤bi≤109)

indicates the personality characteristic value of the female guests.

the final line only contain two integers l,r(−109≤l≤r≤109)

Output

Output an integer on a line to indicate the number of matching combinations.  Examples
Input

5 5
1 2 3 4 5
1 2 3 4 5
1 20

Output

24

Input

3 4
-1 -3 -5
-7 -6 -8 -9
9 9

Output

1

Note

For the first example, except that the male guest 5 and the female guest 5 do not meet the conditions, the other conditions are all
legal, so the answer is 25-1=24

For the second example, there is only a legal matching combination for male guest 1 and female guest 4.

思路

TAG: 二分查找,分情况讨论,尺取

要找 L≤ai×bj≤RL \leq a_i \times b_j \leq RL≤ai​×bj​≤R ,分成以下三种情况即可二分查找。

  1. bj>0b_j>0bj​>0,变形为 L/bj≤ai≤R/bjL/b_j \leq a_i \leq R/b_jL/bj​≤ai​≤R/bj​,注意边界。
  2. bj=0b_j=0bj​=0,变形为 L≤0≤RL \leq 0 \leq RL≤0≤R,只要[L,R]的区间包括0,那么所有的a都满足。
  3. bj<0b_j<0bj​<0,变形为 R/bj≤ai≤L/bjR/b_j \leq a_i \leq L/b_jR/bj​≤ai​≤L/bj​,同样注意边界。

本题也可以使用尺取法将复杂度降低到O(n+m),并且不需要额外分情况讨论。

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[100005],b[100005];
int L,R;
int n,m;
int zfindl(ll n)
{
    int l=1;
    int r=m;
    int mid;
    while(l<=r)
    {
        mid=(l+r)>>1;
        if(b[mid]*n>=L)r=mid-1;
        else l=mid+1;
    }
    if(b[l]*n>=L&&b[l]*n<=R)return l;
    else return -1;
}
int zfindr(ll n)
{
    int l=1;
    int r=m;
    int mid;
    while(l<=r)
    {
        mid=(l+r)>>1;
        if(b[mid]*n<=R)l=mid+1;
        else r=mid-1;
    }
    if(b[r]*n>=L&&b[r]*n<=R)return r;
    else return -1;
}

int ffindl(ll n)
{
    int l=1;
    int r=m;
    int mid;
    while(l<=r)
    {
        mid=(l+r)>>1;
        if(b[mid]*n>R)l=mid+1;
        else r=mid-1;
    }
    if(b[l]*n>=L&&b[l]*n<=R)return l;
    else return -1;
}

int ffindr(ll n)
{
    int l=1;
    int r=m;
    int mid;
    while(l<=r)
    {
        mid=(l+r)>>1;
        if(b[mid]*n<L)r=mid-1;
        else l=mid+1;
    }
    if(b[r]*n>=L&&b[r]*n<=R)return r;
    else return -1;
}


int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=m;i++)cin>>b[i];
    sort(a+1,a+1+n);
    sort(b+1,b+1+m);
    cin>>L>>R;
    ll ans=0;
    for(int i=1;i<=n;i++)
    {
        if(a[i]>=0)
        {
            int pos1=zfindl(a[i]);
            int pos2=zfindr(a[i]);
            if(pos1==-1||pos2==-1)continue;
            else ans+=pos2-pos1+1;
        }
        else if(a[i]<0)
        {
            int pos1=ffindl(a[i]);
            int pos2=ffindr(a[i]);
            if(pos1==-1||pos2==-1)continue;
            else ans+=pos2-pos1+1;
        }
    }
    
    cout<<ans<<endl;
    
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 2021年江西省大学生程序设计竞赛是一项针对大学生的编程竞赛活动。该竞赛旨在提高大学生的编程能力和创新思维,促进计算机科学技术的发展和应用。竞赛内容包括算法设计、程序实现、数据结构等方面,参赛选手需要在规定时间内完成指定的编程任务。这是一项非常有挑战性和有意义的竞赛,对于提高大学生的编程水平和实践能力有很大的帮助。 ### 回答2: 2021年3月14日,江西省大学生程序设计竞赛(ICPC)在江西师范大学举行。本次比赛由江西省计算机学会主办,吉林大学博爱学院赞助,共有15支队伍参赛,此次比赛的主要目的是提高学生们的程序设计与算法能力,同时为江西省选出优秀的程序设计人才。 比赛采用ACM国际竞赛的形式,共有12个题目,考察了参赛选手在算法设计、程序实现、数据结构、编程能力等方面的综合素质。比赛时间长达5个小时,选手需要在规定时间内完成尽可能多的题目,并在保证正确性的同时尽量节省时间。 2019年江苏省大学生程序设计竞赛的比赛题分别从算法设计基础、计算几何、动态规划、搜索、数据结构等方面出题,难度适中。所有参赛队伍均在赛场上充分展示了自己的才华和程序设计能力,赛场上紧张的气氛、激烈的角逐使得比赛更加刺激和有趣。 此次比赛从选拔、组织、管理等方面是非常成功的,既展示了江西省大学生程序设计的风采,也为江西省和国家培养了更多的优秀程序设计人才。希望在未来的竞赛中,江西省程序设计的水平能够更上一层楼,培养更多的优秀程序设计人才。 ### 回答3: 2021年江西省大学生程序设计竞赛于2021年11月7日在南昌大学体育馆举行,来自江西省内的30多所高校的近500支队伍参赛。本次比赛分为省赛和校内赛两个阶段,对参赛队伍进行初步筛选和终极评选。 比赛分为解决8道问题的组成员和4道问题的单人组成员两部分,涵盖了计算几何、动态规划、图论、计算几何等多个领域,难度较高。比赛中,每个队伍有5个小时的时间解决问题,只能在计算机上编写代码解决问题,考验了参赛者的编程实力和团队协作能力。 比赛期间,裁判们在场内设立了各种问题的试题,比如“手工奶酪”、“最大独立集”、“调色板”等,每个问题都要求参赛者在规定时间内精确解决。裁判们在以上操作的基础上,继续引入了随机性、收缩性和对称性等要素,使比赛题目更具挑战性。 本次比赛的成功举办,标志着江西省程序设计竞赛赛事的正式起航,并为江西省内高校的程序设计爱好者提供了一个互相交流、共同提高的平台。同时,也为将来江西省大学生程序设计竞赛的举办打下了坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值