HDU 4334 Trouble (暴力)

题意:给定五个集合,每个集合有n个数,从每个集合各取一个数使和为0。如果能输出Yes,不能则输出No。

    看了网上的题解有很多解法,个人感觉这题暴力就能过。

    首先将一二两个集合合并为数组a,再将三四两个集合合并数组b,然后进行从小到大排序,

    设第五个数组为数组c,依次遍历c中的每一个数,看在a,b中是否存在两个数的和与c中的数的和为0,

    将数组a,b进行sort排序,然后一个正序即从小到大遍历,一个逆序从大到小遍历,

    如果三个数的和小于0,a数组后移一位,否则b后移一位。

    这题WA了两次,第一次WA后发现else if用的是三个i,忘了改成i,j,k了。

    第二次WA后发现Yes输出成了YES,No输出成了NO。

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
long long a[40005],b[40005],c[205],d[205],e[205],f[205],g[205];
long long i,j,x,k,l,n,t,flag=0,p;
int main()
{
    scanf("%lld",&t);
    while(t--)
    {
        flag=0;
        //输入
        scanf("%lld",&n);
        for(i=0;i<n;i++)
        scanf("%lld",&d[i]);
        for(i=0;i<n;i++)
        scanf("%lld",&e[i]);
        for(i=0;i<n;i++)
        scanf("%lld",&f[i]);
        for(i=0;i<n;i++)
        scanf("%lld",&g[i]);
        for(i=0;i<n;i++)
        scanf("%lld",&c[i]);
        //合并
        int cnt1=0;
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
            a[cnt1++]=d[i]+e[j];
        int cnt2=0;
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
            b[cnt2++]=f[i]+g[j];  //三四合并
        sort(a,a+cnt1);
        sort(b,b+cnt2);
        //计算
        for(i=0;i<n;i++) //第五个数组 c[]
        {
            j=0;
            k=cnt2-1;
             while(j<cnt1 && k>=0)
             {
                 if(a[j]+b[k]+c[i]==0LL)
                 {
                     flag=1;
                     break;
                 }
                 else if(a[j]+b[k]+c[i]<0)
                     j++;
                 else
                     k--;
             }

        }
        if(flag) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
    return 0;
}
时间: 2025-01-16 16:35:59

HDU 4334 Trouble (暴力)的相关文章

HDU 4334 Trouble(hash + 枚举)

HDU 4334 题意: 给五个数的集合,问能否从每个集合中取一个数,使五个数之和为0. 思路: 集合大小是200,直接枚举的复杂度是200^5,一定会超时. 直接枚举的上限是3层,我们可以将枚举剩下两个集合各任取一个元素可能组成的元素和,并将其作hash处理,使我们能很快判断枚举出来的三个集合元素和在剩下的两个集合里是否有相应元素匹配. code: /* * @author Novicer * language : C++/C */ #include<iostream> #include&l

HDU 4334——Trouble——————【贪心&amp;水题】

Trouble Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5388    Accepted Submission(s): 1494 Problem Description Hassan is in trouble. His mathematics teacher has given him a very difficult pro

HDU 4334 Trouble

合并排序再枚举. 题意问五个数组中各抽一个加起来 和是否为 0. 开始想用 200*200*200 和 200*200 比.果然TLE了. 后来知道 得 200*200,200*200 ,200 . 先200*200 的枚举,排序,去重.然后三个元素加起来,微调 两个 200*200 的指针. 这题用 %lld 就WA.得用 %I64d .贡献N多TLE.N多WA.怒刷存在感. #include<cstdio> #include<cstring> #include<strin

HDU 4334 Trouble(哈希|线性查找)

给定五个集合,问能否从五个集合各取一个元素,使得元素之和为0. 这道题有两种做法,一种是哈希,然而之前没写过哈希.....比赛后从大神那copy了一份. 这里说另一种, 对于这五个集合分为三组,1,2组求和为一组,3,4组求和分为一组,5为一组. 那么现在转化为了能否从前两组中各取一个元素,使得这两个值和为第三组一个元素的绝对值. 那么对于第一组我们升序排序,第二组我们降序排序. 对于第三组里的任一元素,假如第一组队首加第二组队首之和大于第三组的元素,那么第二组游标往后移一位,反之第一组移一位,

hdu 4876(剪枝+暴力)

题意:给定n,k,l,接下来给出n个数,让你从n个数中选取k个数围成一圈,然后从这k个数中随意选出连续的m(m>=1&&m<=k)个数进行异或后得到[l,r]区间的所有值,让你求最大的r. 分析:关键问题是需要剪枝! 代码实现: #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #inclu

hdu 4499 Cannon(暴力)

题目链接:hdu 4499 Cannon 题目大意:给出一个n*m的棋盘,上面已经存在了k个棋子,给出棋子的位置,然后求能够在这种棋盘上放多少个炮,要求后放置上去的炮相互之间不能攻击. 解题思路:枚举行放的情况,用二进制数表示,每次放之前推断能否放下(会不会和已经存在的棋子冲突),放下后推断会不会互相攻击的炮,仅仅须要对每一个新加入的炮考虑左边以及上边就能够了. #include <cstdio> #include <cstring> #include <algorithm&

Trouble HDU - 4334

Hassan is in trouble. His mathematics teacher has given him a very difficult problem called 5-sum. Please help him. The 5-sum problem is defined as follows: Given 5 sets S_1,...,S_5 of n integer numbers each, is there a_1 in S_1,...,a_5 in S_5 such t

hdu 5077 NAND(暴力打表)

题目链接:hdu 5077 NAND 题目大意:Xiaoqiang要写一个编码程序,然后根据x1,x2,x3的值构造出8个字符,现在给定要求生成的8个字符,问 说Xiaoqiang最少要写多少行代码.代码内容只能为NAND操作和return操作,操作的变量可以是常数. 解题思路:输入总共就256中情况,所以暴力剪枝打表,打表的代码手贱给删了...所以就将一下思路,开一个s数组 表示变量,然后对应每一层每次两个变量进行NAND操作. 大致三个剪枝,dfs时候,变量出现相同就跳过:8个字符可以直接根

HDU 4435 charge-station(暴力+判图)

题目大意:给你一些点,他们可以连通,如果距离超过了d那么就要经过加油站,建立加油站的费用为第i个点是2^(i-1).求费用最小,输出二进制表示的最小费用. 费用和sum最坏等于=2^0+2^1+--+2^(n-1).所以最高位为0这个数字才会最小,从最高位暴力枚举如果删掉这个点之后图是连通的那么就可以删掉,否则不可以. 求图是否连通的时候可以爆搜求解,也可以并查集. charge-station Time Limit: 2000/1000 MS (Java/Others)    Memory L