• UVA-1152-4 Values whose Sum is 0---中途相遇法


    题目链接:

    https://cn.vjudge.net/problem/UVA-1152

    题目大意:

    给出4个数组,每个数组有n个数,问有多少种方案在每个数组中选一个数,使得四个数相加为0.

    n <= 4000

    解题思路:

    两重循环求出a + b的所有情况

    两重循环求出-c - d的所有情况

    枚举a+b的值,在-c-d里面找相同值的数目即可。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<iostream>
     4 #include<algorithm>
     5 #include<string>
     6 #include<cmath>
     7 #include<set>
     8 #include<queue>
     9 #include<map>
    10 #include<stack>
    11 #include<vector>
    12 #include<list>
    13 #include<deque>
    14 using namespace std;
    15 typedef long long ll;
    16 const int maxn = 1e6 + 10;
    17 const double eps = 1e-6;
    18 const int INF = 1 << 30;
    19 int T, n, m;
    20 int a[4005], b[4005], c[4005], d[4005];
    21 int ab[16001000], cd[16001000];
    22 int main()
    23 {
    24     scanf("%d",&T);
    25     while(T--)
    26     {
    27         scanf("%d",&n);
    28         for(int i = 0; i < n; i++)
    29         {
    30             scanf("%d%d%d%d",&a[i],&b[i],&c[i],&d[i]);
    31         }
    32         int tot = 0, ans = 0;
    33         for(int i = 0; i < n; i++)
    34         {
    35             for(int j = 0; j < n; j++)
    36             {
    37                 ab[tot] = a[i] + b[j];
    38                 cd[tot++] = c[i] + d[j];
    39             }
    40         }
    41         sort(ab, ab + tot);
    42         for(int i = 0; i < tot; i++)
    43             ans += upper_bound(ab, ab + tot, -cd[i]) - lower_bound(ab, ab + tot, -cd[i]);
    44         cout<<ans<<endl;
    45         if(T)cout<<endl;
    46     }
    47     return 0;
    48 }
  • 相关阅读:
    一个给照片换底色的牛逼网站
    如何写好ppt
    当你迷茫时,就来看看这个视频!
    IPV6地址检测
    性能测试流程
    pycharm中无法以pytest运行
    Mac charles配置完成后无法上网
    Mac Mysql安装过程的各种坑
    python常用模块之——正则re模块
    Jmeter参数化真香
  • 原文地址:https://www.cnblogs.com/fzl194/p/9320999.html
Copyright © 2020-2023  润新知