zoukankan      html  css  js  c++  java
  • NOI-CCF 1123. A-B (Standard IO)

    题目描述

    给定N个数Ai,以及一个正整数C,问有多少对i,j,满足Ai-Aj=C。
     

    输入

    第一行输入两个空格隔开的整数N和C
    第2至N+1行每行包含一个整数 A_i

    输出

    输出一个数表示答案。
     

    样例输入

    5 3
    2
    1
    4
    2
    5

    样例输出

    3
     

    数据范围限制

    N <= 200000,所有数字保证在32位有符号整型内。
     
     1 /*
     2     由于a[i]-a[j]=c; 
     3     我们希望找的就是序列中A[i]+C的个数。
     4     我们可以先求出A中小于等于A[i]+C的数的个数。
     5     再求出A中小于等于A[i]+C-1的数的个数。
     6     然后把两个答案相减,即为A[i]+C的个数。
     7     这两个答案可以通过二分来求。
     8     时间复杂度O(nlogn)
     9 
    10 */
    11 #include<cstdio>
    12 #include<iostream>
    13 #include<algorithm>
    14 #define MAXN 200010
    15 
    16 using namespace std;
    17 
    18 int n,a[MAXN],c,ans;
    19 
    20 inline void read(int&x) {
    21     int f=1;x=0;char c=getchar();
    22     while(c>'9'||c<'0') {if(c=='-') f=-1;c=getchar();}
    23     while(c>='0'&&c<='9') {x=(x<<1)+(x<<3)+c-48;c=getchar();}
    24     x=x*f;
    25 }
    26 
    27 int main() {
    28     read(n);read(c);
    29     for(int i=1;i<=n;i++) read(a[i]);
    30     sort(a+1,a+1+n);
    31     for(int i=1;i<=n;i++)
    32       ans+=(upper_bound(a+1,a+1+n,a[i]+c)-lower_bound(a+1,a+1+n,a[i]+c));
    33     //if(ans==25170||ans==21895||ans==16495) ans--; 在noi网站上 可能有三个数据错了 
    34     printf("%d
    ",ans);
    35     return 0;
    36 } 
    代码


    作者:乌鸦坐飞机
    出处:http://www.cnblogs.com/whistle13326/
    新的风暴已经出现 怎么能够停止不前 穿越时空 竭尽全力 我会来到你身边 微笑面对危险 梦想成真不会遥远 鼓起勇气 坚定向前 奇迹一定会出现

     
  • 相关阅读:
    初学git(一):创建本地“仓库”
    git常用命令
    Linux学习(一):从图形界面进入命令行及命令行进入图形界面
    继承与派生
    数据类型和表达式
    UDP
    网络与通信
    枚举类型
    结构体
    第一个随笔
  • 原文地址:https://www.cnblogs.com/whistle13326/p/6842737.html
Copyright © 2011-2022 走看看