zoukankan      html  css  js  c++  java
  • 济南学校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 }
  • 相关阅读:
    [洛谷P2783]有机化学之神偶尔会做作弊
    %你赛题解
    TCP协议中的三次握手和四次挥手(图解)
    堆,栈,内存
    java原生数据类型和引用类型
    XHTML 是以 XML 格式编写的 HTML
    TCP和UDP?
    HTTP和HTTPS的区别?
    <!DOCTYPE> 声明
    ASCII和万国码
  • 原文地址:https://www.cnblogs.com/gryzy/p/6038736.html
Copyright © 2011-2022 走看看