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

    题目描述 Description

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

    输入描述 Input Description

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

    输出描述 Output Description

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

    样例输入 Sample Input

    3

    1

    2

    3

    2

    2

    3

    样例输出 Sample Output

    0

    1

    数据范围及提示 Data Size & Hint

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

    /*寻找两两之和小于k的方案数
      可以转化为找与a[i]的和为k的数
      用找到的数的下标减去i即为方案数
    */
    #include<cstdio>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    long long a[10010];
    int main()
    {
    	long long n,i,j,m,k;
    	cin>>n;
    	for(i=1;i<=n;i++)
    	  scanf("%lld",&a[i]);
    	sort(a+1,a+n+1);//排序
    	cin>>m;
    	for(i=1;i<=m;i++)
    	{
    		cin>>k;
    		int s=0;
    		for(j=1;a[j]<=k/2;j++)
    		{
    			long long b=k-a[j],l=0,r=n+1;
    			while(l+1<r)//二分查找与a[j]的和为k的值的位置
    			{
    				long long mid=(l+r)/2;
    				if(a[mid]>b)
    				  r=mid;
    				else
    				  l=mid;
    			}
    			if(l>j)//判断a[l]是否与a[j]位置相同
    			  s+=l-j;
    		}
    		printf("%d
    ",s);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    poj 2253
    POJ 3273
    python基本运算符
    python基本数据类型以及常量变量
    pycharm的快捷键
    计算机基础
    day100 scrapy请求传参 中间件 去重规则 分布式爬虫
    day99 爬虫 scrapy介绍 结构介绍
    day98 爬虫 selenium
    day97 爬虫bs4
  • 原文地址:https://www.cnblogs.com/jyhywh/p/5560173.html
Copyright © 2011-2022 走看看