hdu 1895(二分)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1895

思路:

就是先两两合并,然后排序一下二分就可以了,最后要注意的地方就是二分找到解得时候,还要看一下相邻的数是否与解相等(因为可能有多个这样的数)

Ps:郁闷死了,一开始用的是long long ,然后wa到死,结果改成int就过了,而且那个1000000007也没有用,orz...

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<algorithm>
 6 using namespace std;
 7 #define MAXN 333
 8 int num[6][MAXN];
 9 int Ha[MAXN*MAXN],Hb[MAXN*MAXN],Hc[MAXN];
10 int n1,n2,n3,n4,n5,h1,h2,h3;
11 int ans;
12 
13 int Binary_Search(int l,int h,int x){
14     while(l<=h){
15         int mid=(l+h)/2;
16         if(Hb[mid]==x){
17             int sum=1;
18             for(int i=mid-1;i>=1&&Hb[i]==x;i--)sum++;
19             for(int i=mid+1;i<=h2&&Hb[i]==x;i++)sum++;
20             return sum;
21         }else if(Hb[mid]<x){
22             l=mid+1;
23         }else 
24             h=mid-1;
25     }
26     return 0;
27 }
28 
29 
30 void Solve(){
31     ans=h1=h2=h3=0;
32     for(int i=1;i<=n5;i++)Hc[++h3]=num[5][i];
33     for(int i=1;i<=n1;i++)
34         for(int j=1;j<=n2;j++)
35             Ha[++h1]=num[1][i]+num[2][j];
36     for(int i=1;i<=n3;i++)
37         for(int j=1;j<=n4;j++)
38             Hb[++h2]=num[3][i]+num[4][j];
39     sort(Ha+1,Ha+h1+1);
40     sort(Hb+1,Hb+h2+1);
41     sort(Hc+1,Hc+h3+1);
42     for(int i=1;i<=h3;i++){
43         for(int j=1;j<=h1;j++){
44             int x=-(Hc[i]+Ha[j]);
45             ans+=Binary_Search(1,h2,x);
46         }
47     }
48     printf("%d\n",ans);
49 }
50 
51 
52 int main(){
53     int _case;
54     scanf("%d",&_case);
55     while(_case--){
56         scanf("%d",&n1);
57         for(int i=1;i<=n1;i++)scanf("%d",&num[1][i]);
58         scanf("%d",&n2);
59         for(int i=1;i<=n2;i++)scanf("%d",&num[2][i]);
60         scanf("%d",&n3);
61         for(int i=1;i<=n3;i++)scanf("%d",&num[3][i]);
62         scanf("%d",&n4);
63         for(int i=1;i<=n4;i++)scanf("%d",&num[4][i]);
64         scanf("%d",&n5);
65         for(int i=1;i<=n5;i++)scanf("%d",&num[5][i]);
66         Solve();
67     }
68     return 0;
69 }
View Code
原文地址:https://www.cnblogs.com/wally/p/3084971.html