zoukankan      html  css  js  c++  java
  • 【C++竞赛 F】yyy的三角形

    时间限制:2s 内存限制:32MB
    问题描述
    yyy对三角形非常感兴趣,他有n个木棍,他正在用这些木棍组成三角形。这时xxx拿了两根木棍过来,xxx希望yyy能给他一根木棍,使得xxx可以组成一个三角形。yyy想知道他有多少根木棍满足xxx的要求。
    输入描述
    第一行一个整数T(1≤T≤5)表示数据组数。
    对于每组数据第一行两个整数n(1≤n≤〖10〗^5 ),q(1≤q≤〖10〗^5),分别表示yyy的木棍数量和xxx的询问次数。第二行n个用空格分开的整数L_i (1≤L_i≤〖10〗^9),分别表示yyy的n根木棍的长度。接下来q行,每行两个整数a,b(1≤a,b≤〖10〗^9),表示xxx每次询问两根木棍的长度。
    输出描述
    对于每组数据,输出q行,每行一个整数表示答案。
    输入样例
    1
    7 2
    2 8 5 1 10 5 9
    3 9
    6 5
    输出样例
    3
    6

    【题目链接】:

    【题解】

    三角形的三边要满足
    a+b>c
    a+c>b
    b+c>a
    则转换一下就是

        max(a-b,b-1)<c<a+b


    排序后用二分搞出两个端点就可以了;

    【完整代码】

    #include <bits/stdc++.h>
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    using namespace std;
    #define pb push_back;
    
    const int MAXN = 1e5+100;
    
    int n,q;
    int c[MAXN];
    
    int main()
    {
        //freopen("D:\rush.txt","r",stdin);
        int T;
        scanf("%d",&T);
        while (T--)
        {
            scanf("%d%d",&n,&q);
            rep1(i,1,n)
                scanf("%d",&c[i]);
            sort(c+1,c+1+n);
            rep1(i,1,q)
            {
                int L,R,a,b;
                scanf("%d%d",&a,&b);
                L = max(b-a,a-b);
                R = a+b;
                int l = 0,r = n,ans1=0;
                while (l <= r)
                {
                    int m = (l+r)>>1;
                    if (L<c[m])
                    {
                        ans1 = m;
                        r = m-1;
                    }
                    else
                        l = m+1;
                }
    
                l = 0,r = n;
                int ans2=0;
                while (l <= r)
                {
                    int m = (l+r)>>1;
                    if (c[m]<R)
                    {
                        ans2 = m;
                        l = m+1;
                    }
                    else
                        r = m-1;
                }
                printf("%d
    ",ans2-ans1+1);
            }
        }
        return 0;
    }
    
  • 相关阅读:
    第1次实践作业
    Beta版本演示
    2019 SDN上机第7次作业
    Beta冲刺(4/4)
    Beta冲刺(3/4)
    Beta冲刺(2/4)
    Beta冲刺(1/4)
    2019 SDN上机第6次作业
    2019 SDN上机第5次作业
    SDN课程阅读作业(2)
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626871.html
Copyright © 2011-2022 走看看