ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

P1748 a+b+c+d==0

2022-06-04 18:04:44  阅读:160  来源: 互联网

标签:count map P1748 int sum 四元组 2001


求和问题可以被看做是以下的公式,给定 A,B,C,D 四个列表,计算有多少四元组满足 (a, b, c, d) ∈ A × B × C × D 且 a + b + c + d = 0。我们推测所有的列表都有 n 个数字。

注:不同的四元组是指元素位置不一样的四元组

数据范围 n<=2e3n<=2e3

样例输入

输入的第一个数字指明有 T 组。每一组这样描述,第一行是列表大小 n, 然后有 n 行。每一行都有四个整型数字,分别属于 A,B,C,D 四列。

样例输出

对于每一个测试用例,统计有多少个四元组满足他们的和是 0 。每一组数据一行。

Sample Input

Copy to Clipboard
1
6
-45 22 42 -16
-41 -27 56 30
-36 53 -37 77
-36 30 -75 -46
26 -38 -10 62
-32 -54 -6 45 

Sample Output

Copy to Clipboard
5

这题我尝试了递归和回溯,都不好写.本题和八皇后最大的区别是没有一个条件进行约束,除了最后的结果外不能判断每一步对不对.
按照网上的思路写吧.
类似于a+b=0,只需要遍历所有的结果就可以了.本题有4个数组,那么就先两两相加,转化为二元问题.
但是数据太大,这里有两种思路:
1.使用STL的MAP

map是STL的一个关联容器,它提供一对一的hash

  • 第一个可以称为关键字(key),每个关键字只能在map中出现一次;
  • 第二个可能称为该关键字的值(value);

用map来存数据,就可以避免存重复的数据.简单很多.

2.正常遍历出所有结果,排序后使用二分查找来加快速度.但还需要考虑左右两边是不是相等,比较麻烦.

map的方法如下:

#include<iostream>
#include<map>
using namespace std;
int A[2001],B[2001],C[2001],D[2001];
int main()
{
    int T,n,sum=0,count=0;
    cin>>T;
    while(T--){
        cin>>n;
        sum=0;
        count=0;
        for(int i=1;i<=n;i++)
        cin>>A[i]>>B[i]>>C[i]>>D[i];
        map<int,int> result;
        for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            sum=A[i]+B[j];
            ++result[sum];
        }
        for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            sum=C[i]+D[j];
            if(result[-sum]>0)
            count+=result[-sum];
        }
        cout<<count<<endl;
    }
    return 0;
}

另外,2e3是2000,不是8

标签:count,map,P1748,int,sum,四元组,2001
来源: https://www.cnblogs.com/ACM-YYDS/p/16342266.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有