zoukankan      html  css  js  c++  java
  • 【校OJ】选网线

    暑假学校OJ上的题目。

    一道很有意思的二分。

    题意:三个数组,每个数组各选一个数出来看是否能组成目标数。

    题解:前两个数组两两的和组合一下,二分第三个数组,找是否能组成目标数。

    代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<vector>
     5 #include<algorithm>
     6 #include<cmath>
     7 using namespace std;
     8 const int maxn = 1001;
     9 
    10 int l,n,m;
    11 int a[maxn];
    12 int b[maxn];
    13 int c[maxn];
    14 int sum[maxn];
    15 int cnt = 1;
    16 
    17 int find(int x){    
    18     for(int i = 1; i <= m; i ++){
    19         int l = 1,r = cnt+1;
    20         int mid;
    21         while( l <= r){
    22             mid = ( l + r) >> 1;
    23             if(c[i] + sum[mid] == x){
    24                 return true;
    25             } 
    26             else if(c[i] + sum[mid] < x){
    27                 l = mid + 1; 
    28             }
    29             else if(c[i] + sum[mid] > x){
    30                 r = mid - 1;
    31             }
    32         }
    33     }
    34     return false;
    35 } 
    36 
    37 int main(){
    38     cin>>l>>n>>m;
    39     for(int i = 1; i <= l ;i++){
    40         cin>>a[i];
    41     }
    42     for(int i = 1; i <= n ;i++){
    43         cin>>b[i];
    44     }
    45     for(int i = 1; i <= m ;i++){
    46         cin>>c[i];
    47     }
    48     for(int i = 1; i <= l ;i++){
    49         for(int j = 1; j <= n ;j++){
    50             sum[cnt++] = a[i]+b[j];
    51         }
    52     }
    53     sort(sum+1,sum+1+n);
    54     int s;
    55     cin>>s;
    56     while(s--){
    57         int x;
    58         cin>>x;
    59         if(find(x)){
    60             cout<<"Yes"<<endl;
    61         }
    62         else{
    63             cout<<"No"<<endl;
    64         }
    65     }
    66         
    67     return 0;
    68 } 
    View Code
  • 相关阅读:
    Codeforces Round448 D
    Codeforces Round448 C Square Subsets
    hdu6006
    2017计蒜客计算之道初赛第六场 微软大楼设计方案(困难)
    UVA 12105 Bigger is Better
    Codeforce 55D Beautiful numbers
    4月补题
    C++小技巧之CONTAINING_RECORD
    Codeforces #380 div2 E(729E) Subordinates
    Codeforces #380 div2 D(729D) Sea Battle
  • 原文地址:https://www.cnblogs.com/Asumi/p/9457960.html
Copyright © 2011-2022 走看看