当前位置: 首页 > news >正文

二分搜索-poj2785

题目链接:http://poj.org/problem?id=2785

题目大意:要求输入A,B,C,D四个数组,从每个数组中分别取出一个数来相加,求出相加后 和为0 总共有多少种加法。

#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAXN=4000;
int A[MAXN],B[MAXN],C[MAXN],D[MAXN];
int AB[MAXN*MAXN];
int n;
int main()
{
    long long res=0;
    while(~scanf("%d",&n))
    {
        for(int i=0;i<n;i++)
        {
            scanf("%d%d%d%d",&A[i],&B[i],&C[i],&D[i]);
        }
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                AB[i*n+j]=A[i]+B[j];//现将数组A+数组B中的元素相加,然后在对数组C,D进行相加
            }
        }
        sort(AB,AB+n*n);
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                int cd=-(C[i]+D[j]);
                //此处将cd的值设置为-(C[i]+D[j]),可以用AB数组中的数与cd直接相加,便于判断二者之和是否为0
                res+=upper_bound(AB,AB+n*n,cd)-lower_bound(AB,AB+n*n,cd);
                /*upper_bound()与lower_bound()函数的用法参见 https://blog.csdn.net/jadeyansir/article/details/77015626
                找到AB数组中第一个比cd大的数的位置pos1,减去AB数组中第一个比cd小的数的位置pos2,如果pos1-pos2=1,则说明
                在AB数组中,处在pos1和pos2之间的数就是 cd ,详细参考下图,如当cd=-72时,pos1=9,pos2=8,符合条件,res加1;
                */
            }
        }
        printf("%lld\n",res);
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/LJHAHA/p/9973142.html

相关文章:

  • MyBatis实战之配置
  • 电子科协 第二期
  • python高阶函数,map,filter,reduce,ord,以及lambda表达式
  • python 类的初始化
  • Python Cookies不能存入中文的问题
  • 17-Python3 循环语句
  • 25-Python3 错误和异常
  • Python-流程控制之if判断
  • 如何用思维导图快速理解PMBOK-PMP第六版教材
  • Scala实战高手****第9课:Scala类和对象彻底实战和Spark源码鉴赏
  • 分层开发之DTO和JXL读取excel写入excel
  • 线程池的简单实现
  • Manager isn't accessible via %s instances % cls.__name_ 报错信息
  • 谈谈开发文本转URL小工具的思路
  • js-arguments
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • Android优雅地处理按钮重复点击
  • css布局,左右固定中间自适应实现
  •  D - 粉碎叛乱F - 其他起义
  • ReactNativeweexDeviceOne对比
  • WebSocket使用
  • XML已死 ?
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 爬虫模拟登陆 SegmentFault
  • 探索 JS 中的模块化
  • FaaS 的简单实践
  • 从如何停掉 Promise 链说起
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • ###C语言程序设计-----C语言学习(6)#
  • #vue3 实现前端下载excel文件模板功能
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #微信小程序:微信小程序常见的配置传值
  • (¥1011)-(一千零一拾一元整)输出
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (一一四)第九章编程练习
  • (转)Scala的“=”符号简介
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .axf 转化 .bin文件 的方法
  • .NET Core 中的路径问题
  • .Net Core 中间件验签
  • .net core使用ef 6
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET 使用配置文件
  • .net2005怎么读string形的xml,不是xml文件。
  • .net程序集学习心得
  • ?
  • []指针
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [ajaxupload] - 上传文件同时附件参数值
  • [Android 13]Input系列--获取触摸窗口
  • [C#]C# winform部署yolov8目标检测的openvino模型