UVA1152:4 Values whose Sum is 0(和为0的4个值)

原创 2017年02月04日 13:05:25

作者:xq的acm之路

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3593

题目大意:给定4个n元素集合A,B,C,D,要求从中分别选出一个元素a,b,c,d,使得a+b+c+d=0,问有多少种写法。

思路:刚开始用不定数组vector存储A+B,然后C+D,扫描数组里有多少个元素符合,发现超时,就想起了ub和lb这两个函数,

假设数组int point【5】={1,2,7,7,9},ans=7;

upper_bound使用方法:

int tem=upper_bound(point,point+5,ans)-point //ans为待查找元素,输出为ans最大可以插入数组point里面的位置

输出:4;

lower_bound使用方法:

int tem=lower_bound(point,point+5,ans)-point //ans为待查找元素,输出为ans最小可以插入数组point里面的位置

输出:2;

因此,使用ub和lb可以查询数组里某个元素的个数,比扫描数组一遍要省时得多。

当然,对不定数组使用这两个函数要用到迭代器。

至于迭代器,可以百度,,,

代码如下:

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        vector<int>ab;
        int a[4001],b[4001],c[4001],d[4001],cd[4001];
        int t,sum=0;
        cin>>t;
        for(int i=0; i<t; i++)
        {
            cin>>a[i]>>b[i]>>c[i]>>d[i];
        }
        for(int i=0; i<t; i++)
        {
            for(int j=0; j<t; j++)
            {
                int m=a[i]+b[j];
                ab.push_back(m);
            }
        }
        sort(ab.begin(),ab.end());
        for(int i=0; i<t; i++)
        {
            for(int j=0; j<t; j++)
            {
                int ans=(c[i]+d[j])*(-1);
                int x=lower_bound(ab.begin(),ab.end(),ans)-ab.begin();
                int y=upper_bound(ab.begin(),ab.end(),ans)-ab.begin();
                sum+=y-x;
            }
        }
        cout<<sum<<endl;
        if(n>0) cout<<endl;
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

[UVa 1152] 和为0的四个值(4 Values whose Sum is 0)

Judge:https://vjudge.net/problem/UVA-1152 题意:给定4个n元素集合A,B,C,D,要求分别从中选取一个元素a,b,c,d,使得四个数之和为零。求一共有多少种选...

UVA - 1152 4 Values whose Sum is 0

题目大意:在4个都有n个元素的集合中,每个集合选出一个元素,使得4个数和为0。问有几种方案。 题目分析:开始想到暴力枚举,对四组数枚举,复杂度O(n^4)无法接受,后来对前三组数枚举累加,在第四组中...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

UVa1152 - 4 Values whose Sum is 0

1152 - 4 Values whose Sum is 0The SUM problem can be formulated as follows: given four lists A, B, C...

UVa #1152 4 Values whose Sum is 0 (例题8-3)

这道题虽说不难但是还是摩擦了半天。另外例题8-2感觉很神奇,就不放代码了 网上不少人用了数组排序的方法,也有自己实现hash_map的方法。我用了哈希,主要是为了练习练习自己写哈希 ...

Uva - 1152 - 4 Values whose Sum is 0

虽然时间给了9秒,但显然四重循环直接就会超时,太慢了。。。先枚举前a和b,然后在后两个中找a+b的形式。 AC代码: #include #include #include #include #...

Uva1152 4 Values whose Sum is 0

Uva1152 4 Values whose Sum is 0The SUM problem can be formulated as follows: given four lists A, B, ...

UVA1152-4 Values whose Sum is 0

4 Values whose Sum is 0 Time limit: 9.000 seconds The SUM problem can be formulated as follows:...

UVA1152 4 Values whose Sum is 0

题目大意:给定4个n(1 时间限制:9000ms 分析:最容易想到的是四重循环枚举a, b, c, d,看看加起来是否是0,时间复杂度O(n^4),超时。 这时我们采用一种叫做“中途相遇法”的算法,...

UVa 1152 4Values whose Sum is 0

题意  从4个n元集中各挑出一个数  使它们的和为零有多少种方法 直接n^4枚举肯定会超时的  可以把两个集合的元素和放在数组里  然后排序 枚举另外两个集合中两元素和  看数组中是否有其相反数就行...
  • acvay
  • acvay
  • 2015-01-29 10:49
  • 694

1152 - 4 Values whose Sum is 0

4 Values whose Sum is 0The SUM problem can be formulated as follows: given four lists A,B,C,DA,B,C,D...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)