关闭

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

标签: uva
238人阅读 评论(0) 收藏 举报
分类:

作者: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;
}
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

例题8-3 和为0的4个值 UVa1152

1.题目描述:点击打开链接 2.解题思路:本题要求从4个集合中分别找4个数,使他们的和相加等于0的所有情况个数,由于每个元素的范围比较大,且一个集合的总量可以多达4000,直接写四重循环肯定TLE,...
  • u014800748
  • u014800748
  • 2015-02-05 14:27
  • 525

Uva1152 4 Values whose Sum is 0 【中途相遇+二分】【例题8-3】

中途相遇思路,先算一部分,再二分查找!
  • GuoZLH
  • GuoZLH
  • 2017-02-23 00:21
  • 115

一个4节点Hadoop集群的配置示例

环境: 操作系统:CentOS 6.5 64bit Hadoop:Version 1.2.1 Servers:hadoopnamenode,hadoop2ndnamenode,had...
  • sczhoyiganb
  • sczhoyiganb
  • 2014-12-30 14:45
  • 270

2位可以容纳4个可能的值

当您在2.1课中学习到基本的寻址和变量定义时,现代机器上的内存通常被组织成字节大小的单位,每个单元有一个唯一的地址。在这一点上,它是有用的认为记忆是一束分支或邮箱,我们可以把和检索信息,和变量作为访问...
  • shazhugw
  • shazhugw
  • 2016-09-10 15:29
  • 98

初学者--bootstrap(四)栅格系统----在路上(8)

栅格系统:是bootstrap提供的响应式布局方式 栅格系统的核心:就是把容器container划分12等分,也就是版心被划分12等份。 栅格系统大多引用的是bootstrap的插件,所以代码写起来会...
  • qq_36995398
  • qq_36995398
  • 2016-12-12 20:10
  • 327

四字节16进制数转化成浮点数的原理是什么?

四字节16进制数可转换为四个二进制字节(Bytes),从而使用Api函数来处理成单精度浮点数。 以下用VB代码处理。 VB有专门的API函数CopyMemory能处理2-10进制浮点数...
  • xuexiaokkk
  • xuexiaokkk
  • 2016-01-09 18:13
  • 2320

2014蓝桥杯--神奇算式

这道题严格来说不是一道难题,期间的思路是字符串与数字之间的转换和组合,刚开始不会用字符串转换的几个函数,用判断数字是几位数然后拆分比较的方法,试了几次结果不对,后来看别人的代码了解了sprintf,s...
  • yidijimaodejiangyou
  • yidijimaodejiangyou
  • 2015-03-21 09:48
  • 1199

和为0的四个值UVa1152

给定4个n(1<=n<=4000)元素组合A,B,C,D,要求分别从中选取一个元素a,b,c,d,使得a+b+c+d=0。问:有多少种解法。 例如:6 -45 22 42 -16 -41 -27...
  • qq_36459536
  • qq_36459536
  • 2017-10-31 18:41
  • 28

Uva 1152 和为0的4个值 hash/二分

题意: 给定4个n(1 <= n <= 4000)元素集合A, B, C, D,要求分别从中选取一个元素a, b, c, d,使得a+b+c+d = 0,问有多少种选法。 分析: 显然四重循环是...
  • hjt_fathomless
  • hjt_fathomless
  • 2016-05-10 11:13
  • 821

例题 8-2 和为0的4个值 UVa 1152

分析:现将集合AB中的元素求和保存起来,再将CD中的元素求和保存起来,然后再枚举看看两数组中是否存在相反数,在分别计算就可以了。按照书上说的分别将和保存在有序数组和map中,map果然超时了。 有序...
  • loveyou11111111
  • loveyou11111111
  • 2015-10-06 00:18
  • 133
    个人资料
    • 访问:12337次
    • 积分:868
    • 等级:
    • 排名:千里之外
    • 原创:76篇
    • 转载:2篇
    • 译文:0篇
    • 评论:3条