zoukankan      html  css  js  c++  java
  • 总数统计

    【题目描述】

    给出n个数,统计两两之和小于等于k的方案数之和。

    【输入描述】
    第一行一个数n,表示数字的个数;
    第二行到第n + 1行,每行一个不超过2,000,000,000的数k;
    第n+2行一个数m,表示m个问题;
    第n+3行到第n+m+2行,每行一个数m,询问表示n中两两组合不超过m的组合的个数。
    【输出描述】

    输出m行,每行对应一个答案。

    【样例输入】

    3

    1

    2

    3

    2

    2

    3

    【样例输出】

    0

    1

    【数据范围及提示】

    30%的数据1 ≤ n ≤ 100, 1 ≤ m ≤ 50, k ≤ 2000;
    100%的数据 1 ≤ n ≤ 10000, 1 ≤ m ≤ 100, k ≤ 2,000,000,000。

    源代码:
    
    #include<cstdio>
    #include<algorithm> //第一次用sort。
    using namespace std;
    long long m,n,i[10001]; //不开Long Long会死人的!
    void x2(long long t)
    {
        int left=1,right=n,num(0),ans(0);
        while (left<=right) //二分查找最大的i[]。
        {
            int mid=(left+right)/2;
            if (i[mid]<=t)
            {
                left=mid+1;
                num=mid;
            }
            else
              right=mid-1;
        }
        for (int a=1;a<=num;a++)
        {
            int k(0);
            left=1;
            right=a-1;
            while (left<=right) //二分查找能够与i[a]匹配的最大的i[]。
            {
                int mid=(left+right)/2;
                if (i[mid]+i[a]<=t)
                {
                    left=mid+1;
                    k=mid;
                }
                else
                  right=mid-1;
            }
            ans+=k; //此节点前面的节点自然都符合条件,累加。
        }
        printf("%d
    ",ans);
    }
    int main() //二分法。
    {
        scanf("%d",&n);
        for (int a=1;a<=n;a++)
          scanf("%d",&i[a]);
        sort(i+1,i+n+1); //升序排列。
        scanf("%d",&m);
        for (int a=1;a<=m;a++)
        {
            long long t; //恶心的Long Long。
            scanf("%d",&t);
            x2(t);
        }
        return 0;
    }
  • 相关阅读:
    mysql分组查询
    (三)分布式数据库tidb-隔离级别详解
    (二)分布式数据库tidb-事务
    (一)ArrayList集合源码解析
    (一)分布式数据库tidb-简介
    (二)LinkedList集合解析及手写集合
    电商数仓中需要统计的指标
    实时推荐模型的算法设计
    数据库需要掌握到什么程度可以应付工作?
    Mysql的万能优化方法
  • 原文地址:https://www.cnblogs.com/Ackermann/p/5560049.html
Copyright © 2011-2022 走看看