• 济南学校D1T3_hahaha


    【问题描述】

    小Q对计算几何有着浓厚的兴趣。他经常对着平面直角坐标系发呆,思考一些有趣的问题。今天,他想到了一个十分有意思的题目:

    首先,小Q会在轴正半轴和轴正半轴分别挑选个点。随后,他将轴的点与轴的点一一连接,形成条线段,并保证任意两条线段不相交。小Q确定这种连接方式有且仅有一种。最后,小Q会给出个询问。对于每个询问,将会给定一个点,请回答线段OP与条线段会产生多少个交点?

    小Q找到了正在钻研数据结构的你,希望你可以帮他解决这道难题。

    【输入格式】

    第行包含一个正整数,表示线段的数量;

    第行包含个正整数,表示小Q在轴选取的点的横坐标;

    第行包含个正整数,表示小Q在轴选取的点的纵坐标;

    第4行包含一个正整数,表示询问数量;

    随后行,每行包含两个正整数,表示询问中给定的点的横、纵坐标。

    【输出格式】

    共行,每行包含一个非负整数,表示你对这条询问给出的答案。

    【样例输入】

    3

    4 5 3

    3 5 4

    2

    1 1

    3 3

    【样例输出】

    0

    3

    【样例解释】

    然后塔里啥都没有。

    【数据规模与约定】

    对于的数据50%,n,m<=2000。

    对于的数据100%,n,m<=200000,坐标范围<=100000000。

    _______________________________________________________________

    简单的二分答案

    _______________________________________________________________

     

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<algorithm>
     5 
     6 using namespace std;
     7 int a[200010],b[200010];
     8 int n,m;
     9 int x,y;
    10 void readint(int &x)
    11 {
    12     char c=getchar();
    13     for(;c>'9'||c<'0';c=getchar());
    14     x=0;
    15     for(;c<='9'&&c>='0';c=getchar())x=x*10+c-'0';
    16 }
    17 bool pd(int cur)
    18 {
    19     double yy=(double)(a[cur]-x)*b[cur]/a[cur];
    20     return yy-y<=0.0000001;
    21 }
    22 int main()
    23 {
    24     freopen("hahaha.in","r",stdin);
    25     freopen("hahaha.out","w",stdout);
    26     readint(n);
    27     for(int i=0;i<n;i++)readint(a[i]);
    28     sort(a,a+n);
    29     for(int i=0;i<n;i++)readint(b[i]);
    30     sort(b,b+n);
    31     readint(m);
    32     for(int i=0;i<m;i++)
    33     {
    34         readint(x);readint(y);
    35         int l=0,r=n-1,ans=-1;
    36         while(l<=r)
    37         {
    38             int mid=(l+r)/2;
    39             if(pd(mid))
    40             {
    41                 ans=mid;
    42                 l=mid+1;
    43             }
    44             else r=mid-1;
    45         }
    46         printf("%d\n",ans+1);
    47     }
    48     fclose(stdin);
    49     fclose(stdout);
    50     return 0;
    51 }
  • 相关阅读:
    如何在Ubuntu Server 18.04上安装Microsoft的Procmon
    如何在Ubuntu 20.04上安装Wine 5.0
    如何在Kali Linux 2020中启用SSH服务
    如何在Ubuntu 20.04 LTS Focal Fossa上安装Apache Groovy
    如何使用命令在Ubuntu 20.04 Linux上安装Vmware Tools
    在Ubuntu 20.04 LTS Focal Fossa上安装Zabbix Agent
    hdu 2089 不要62
    hdu 2093 成绩排名
    hdu 2104 hide handkerchief
    leetcode147对链表进行插入排序
  • 原文地址:https://www.cnblogs.com/gryzy/p/6038736.html
Copyright © 2020-2023  润新知