HDU 2141(二分&三分 _B题)解题报告

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

-----------------------------------------------------------------------------------

题意:三个数组,找到每个数组中加和为M的值的组数。

思路:首先将后两个数组加和 O(N^2),排序 O(NlogN),然后利用二分求解。

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<bitset>
#include<cstdlib>
#include<cmath>
#include<set>
#include<list>
#include<deque>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
const double PI = acos(-1.0);
const double eps = 1e-6;
int c1=0;

int main(void){
    int L,M,N;
    while(~scanf("%d %d %d",&L,&M,&N)){
    int A[L]={0};
    int B[M]={0};
    int C[N]={0};
    for(int i=0;i<L;i++){
        scanf("%d",&A[i]);
    }
    for(int i=0;i<M;i++){
        scanf("%d",&B[i]);
    }
    for(int i=0;i<N;i++){
        scanf("%d",&C[i]);
    }
    int  SM =0;
    scanf("%d",&SM);
    int S[SM]={0};
    for(int i=0;i<SM;i++){
        scanf("%d",&S[i]);
    }
    int bcm = M*N;
    int BC[bcm];
    for(int i=0;i<M;i++){
        for(int j=0;j<N;j++){
            BC[i*N+j]=B[i]+C[j];
        }
    }
    sort(BC,BC+bcm);
    int new_end = unique(BC,BC+bcm)-BC;
    c1++;
    printf("Case %d:\n",c1);
    for(int i=0;i<SM;i++){
    int flag =0;
    int tf =S[i];
    for(int j=0;j<L;j++){
        if(BC[(lower_bound(BC,BC+new_end,tf-A[j])-BC)]==tf-A[j]){
            flag =1;
            break;
        }
    }
    if(flag){
        printf("YES\n");
    }
    else{
        printf("NO\n");
    }
    }

    }

    return 0;

}

原文地址:https://www.cnblogs.com/caomingpei/p/8338386.html

时间: 2024-10-09 05:23:56

HDU 2141(二分&三分 _B题)解题报告的相关文章

hdu 2680 Choose the best route 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2680 题目意思:实质就是给定一个多源点到单一终点的最短路. 卑鄙题---有向图.初始化map时 千万不要写成 map[i][j] = map[j][i] = X. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 using namespac

08年acm区域赛北京赛区 部分题解题报告

08年区域赛北京赛区 http://poj.org/searchproblem?field=source&key=Beijing+2008 POJ 3921 Destroying the bus stations 题目还是比较难的,当时的榜似乎只有4/25的通过/提交,其实题目数据很水.学长转换模型写了网络流求最小割,可以AC,不过自己造了个数据推翻了正确性.我写了个很挫的bfs套bfs,外层是最小的删除点数,内层是求最短路,数据很水可以AC.但比较蛋疼的在于bfs耗内存,而且队列中的点数是阶乘

hdu 2066 一个人的旅行 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066 题目意思:给出T条路,和草儿家相邻的城市编号,以及草儿想去的地方的编号.问从草儿家到达草儿想去的地方的最短时间是多少. 一开始自己写的只能处理单边出发的情况,对于以下这幅图,只能处理箭头所示的方向,不能向下,于是不知道为什么出现了百年难得一遇的Runtime Error(ACCESS_VIOLATION)! 10 2 31 3 53 8 42 5 25 8 31 4 74 9 129 10 2

圆锥曲线:椭圆小题解题报告

圆锥曲线:椭圆小题解题报告 注意事项: 由于本人水平有限,部分题目解题方法可能非最优解,如有更好方法欢迎在评论区指正. 部分题目讲解可能过于口语化,导致并不符合官方(人教版教材)的要求,请各位在考试中不要学习,使用正确的,符合要求的用语. 本文中可能存在错别字,望发现者在评论区指正. 本篇博客是为记录本人在完成学校作业的过程中遇到的问题,同时给部分同学作为解题参考用. 本篇博客中绘制图像的工具是geogebra. 1~10题: 1 题目: 已知F~1~,F~2~是椭圆\(x^2/4+y^2/3=

2016.8.27一套简单的题解题报告

一套不错的题,需要相关资料的联系我咯 考试分析: 1.  由于题目的名字加上第一道题没读完时我以为是我最不擅长的treeDP(其实不得不说,树和图上的题我真的是不想写,一般都写不对,上课太不认真,这个弱点要加强训练),我直接跳到了最后一道题,明知考3h还用了30min去分析,不过还是感谢,这30min救了我两道题出来: 这套题的确还是比较简单,后两道题只要认真分析数据都不会有问题,也许是因为暑假切了贪心和递推,我对分析数据比较在行,第三题切完之后还有2h,不过没写高精的我有点慌,打算最后留一点时

HDU 2199 (二分&amp;三分 _A题)解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2199 ----------------------------------------------------------------------------------- 题意:8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,求解 思路:判断下导数,二分法求解. 代码: #include<cstdio> #include<cstring> #include&

Codeforces Round #211 (Div. 2) D题(二分,贪心)解题报告

---恢复内容开始--- 题目地址 简要题意: n个小伙子一起去买自行车,他们有每个人都带了一些钱,并且有公有的一笔梦想启动资金,可以分配给任何小伙子任何数值,当然分配权在我们的手中.现在给出m辆自行车的价格,需要你求出最多可以让多少个小伙子有属于自己的自行车(即自行车不可以两个人共有,只能一个人有),和在满足之前这个条件的情况下,通过最省私人钱的分配,最少需消耗多少私人的资金. 思路分析: 首先考虑,如何分配才是使其中x个小伙子能有自己车的最好分配方法.不难想到,将n个小伙子按个人资金从大到小

CQOI2015 后3题解题报告

这个嘛= =,CQOI我只做了后面3题(前面两题老师还没考就还不敢写= =)说一下被虐报告吧= = T3:[CQOI2015]任务查询系统 描述:戳我~~~ 这道题首先很明显是道裸的数据结构题啦.首先他要求在线,那么按顺序建个函数式线段树就行啦 自己太弱调了好久= = CODE: 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<algorithm> 5 #inclu

hdu 1002.A + B Problem II 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1002 题目意思:就是大整数加法. 两年几前做的,纯粹是整理下来的. 1 #include <stdio.h> 2 #include <string.h> 3 4 #define max 1010 5 char a[max], b[max]; 6 7 int main() 8 { 9 int i, k, s, c, T, len1, len2; 10 scanf("%d&quo