zoukankan      html  css  js  c++  java
  • 【noiOJ】p1794

    t1794:集合加法

    总时间限制: 
    3000ms
     
    内存限制: 
    65536kB
    描述
    给出2个正整数集合A = {pi | 1 <= i <= a},B = {qj | 1 <= j <= b}和一个正整数s。问题是:使得pi+ qj = s的不同的(i, j)对有多少个。
    输入
    第1行是测试数据的组数n,后面跟着n组测试数据。

    每组测试数据占5行,第1行是和s (1 <= s <= 10000),第2行是一个正整数a (1 <= a <= 10000),表示A中元素的数目。第3行是a个正整数,每个正整数不超过10000,表示A中的元素。第4行是一个正整数b (1 <= b <= 10000),表示B中元素的数目。第5行是b个正整数,每个正整数不超过10000,表示B中的元素。

    注意:这里的集合和数学书上定义的集合有一点点区别——集合内可能包含相等的正整数。
    输出
    n行,每行输出对应一个输入。输出应是一个非负整数。
    样例输入
    2
    99
    2
    49 49
    2
    50 50
    11
    9
    1 2 3 4 5 6 7 8 9
    10
    10 9 8 7 6 5 4 3 2 1
    
    样例输出
    4
    9
     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 int n1,n,m;
     7 int i,j,t;
     8 int nowx,ans,x;
     9 int a[10000+10],b[10000+10],ha[10000+10];
    10 int main()
    11 {
    12     int left,right,mid;
    13     scanf("%d",&n1);
    14     for (i=1;i<=n1;i++)
    15     {
    16         memset(a,0,sizeof(a));
    17         memset(b,0,sizeof(b));
    18         memset(ha,0,sizeof(ha));
    19         ans=0; t=1;
    20         scanf("%d",&x);
    21         scanf("%d",&n);
    22         for (j=1;j<=n;j++)
    23             scanf("%d",&a[j]);
    24         scanf("%d",&m);
    25         for (j=1;j<=m;j++)
    26             scanf("%d",&b[j]);
    27         sort(a+1,a+n+1);
    28         sort(b+1,b+m+1);
    29         for (j=2;j<=m;j++)
    30         if (b[j]!=b[j-1])
    31         {
    32             ha[j-1]=t;
    33             t=1;
    34         }
    35         else
    36             t++;
    37         ha[m]=t;
    38         for (j=1;j<=n;j++)
    39         {
    40             nowx=x-a[j];
    41             left=0; right=m;
    42             while (right-left>1)
    43             {
    44                 mid=(left+right)>>1;
    45                 if (b[mid]<=nowx)
    46                     left=mid;
    47                 else
    48                     right=mid;                    
    49             }
    50             if (b[left]==nowx && ha[left]!=0)
    51                 ans+=ha[left];
    52             if (b[right]==nowx)
    53                 ans+=ha[right];
    54         }
    55         printf("%d
    ",ans);
    56     }
    57 }
    —Anime Otaku Save The World.
  • 相关阅读:
    ionic文档
    Can't resolve all parameters for Storage: (?).
    cannot find module @ionicapp-scriptsinionic-app-scripts.js
    ionic 环境搭建
    学习文档记录
    js 文件引用传递参数
    No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
    js 去除左右空格
    sql 多行数据合并
    filter @Autowired nullPointer
  • 原文地址:https://www.cnblogs.com/DMoon/p/5004887.html
Copyright © 2011-2022 走看看