zoukankan      html  css  js  c++  java
  • 2013dgtcs 数对

    题目

    问题描述:

    考虑一组n个不同的正整数a1,a2,...,am,它们的值在1到1000000之间。给定一个整数x。写一个程序sumx计算这样的数对个数(ai,aj),1<=i<j<=n并且ai+aj=x。

    数据输入:

    标准输入的第一行是一个整数n(1<=n<=1000000)。第二行有n个整数表示元素。第三行是一个整数x(1<=x<=2000000)。

    数据输出:

    输出一行包含一个整数表示这样的数对个数。

    注意:对于50%的测试数据,n<=1000。

    输入输出样例:

    sumx.in

    9

    5 12 7 10 9 1 2 3 11

    13

    sumx.out

    3

    解释:不同的和为13的数对是(12, 1), (10, 3)和(2, 11)。

     

    分析

       开个桶,或者排序二分

     

    代码

     1 #include <cstdio>
     2 #include <algorithm>
     3 using namespace std;
     4 int b[1000010];
     5 int main()
     6 {
     7     freopen("sumx.in","r",stdin);
     8     freopen("sumx.out","w",stdout);
     9     int n,x,sum=0;
    10     scanf("%d",&n);
    11     for (int i=1;i<=n;i++)
    12     {
    13         int a;
    14         scanf("%d",&a);
    15         b[i]=a;
    16     }
    17     scanf("%d",&x);
    18     sort(b+1,b+1+n);
    19     for (int i=1;i<=n;i++)
    20     {
    21         int l=1,r=n,mid,c=0;
    22         while (l<=r)
    23         {
    24             mid=(l+r)/2;
    25             if (b[mid]+b[i]<=x) 
    26             {
    27                l=mid+1; c=mid;
    28             }
    29             else r=mid-1;
    30         }
    31         if (b[c]+b[i]==x&&c!=i)
    32         sum++;
    33     }
    34     printf("%d",sum/2);
    35 }

     

    为何要逼自己长大,去闯不该闯的荒唐
  • 相关阅读:
    java实现定时任务(Quartz)
    java实现发送邮件工具
    mysql服务器查询慢原因分析方法
    Vue 插槽
    Vue组件参数传递问题
    Vue路由
    Spring Boot2 拦截器对静态资源的放行
    Spring Boot过滤非法请求
    U盘安装linux(CentOS Kali ubuntu)无法挂载_实测
    如何编译Java程序以及运行程序
  • 原文地址:https://www.cnblogs.com/zjzjzj/p/10699686.html
Copyright © 2011-2022 走看看