首页 > 其他分享 ><折半搜索>题型总结

<折半搜索>题型总结

时间:2023-07-08 12:33:06浏览次数:42  
标签:总结 题型 int long Rpart 等式 now Lpart

折半搜索

meet in the middle 算法 (又叫 split and merge 算法)

顾名思义这种算法就是同时从两个点往中间搜索,直到碰头为止

而使等式两边未知数个数相等或尽量均匀分布是用 meet in the middle 算法解决等式问题的常见方法

SP4580 ABCDEF

题目描述

给定一个集合S(元素个数100以内)
求满足下式的六元组个数

image-20230708122103018

解题思路

将等式化简得到

a*b+c=d*(e+f)

可以看出两边互不相干,分别求出等式两边的所有情况,再进行折半搜索

#include<bits/stdc++.h>

using namespace std ;

int n ;
long long  num[101] ;
long long Lpart[1000001],Rpart[1000001] ;
long long ans = 0 ;
int main()
{
    scanf("%d",&n) ;
    for(int i=1;i<=n;++i) scanf("%lld",&num[i]) ;
    int cnt=0 ;
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            for(int k=1;k<=n;++k)
                Lpart[++cnt] = num[i]*num[j]+num[k] ;
    cnt=0 ;
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            for(int k=1;k<=n;++k)
            {
                Rpart[++cnt] = num[i]*(num[j]+num[k]) ;
                if(num[i]==0) Rpart[cnt]=LONG_LONG_MAX ;
            }
                
    sort(Lpart+1,Lpart+1+n*n*n) ;
    sort(Rpart+1,Rpart+1+n*n*n) ;
    int i=n*n*n ;
    int j=n*n*n ;

    for(;i>=1&&j>=1;)
    {
        long long now = 0 ;
        for(;j>=1;)
        {
            if(Rpart[j]==Lpart[i]) now++ ;
            if(Lpart[i]-Rpart[j]>0) break ;
            j-- ;
        }
        ans+=now ;
        for(;;)
        {
            i-- ;
            if(i<1) break ;
            if(Lpart[i]==Lpart[i+1]) ans+=now ;
            else break ;
        }
    }
   
    printf("%lld",ans) ;
    return 0 ;
}

其他解题思路:

可以直接将等式左边的结果存入hash表,然后用等式右边的结果再hash表中查找

标签:总结,题型,int,long,Rpart,等式,now,Lpart
From: https://www.cnblogs.com/BoWing/p/17537038.html

相关文章

  • MySQL常用知识点总结
    MySQL常用知识点总结参考地址:(https://maifile.cn/est/a3206887806899/pdf)【一】知识点总结【二】多表查询【三】常用函数【四】Excel数据清洗......
  • 深度剖析之由浅入深揭秘JavaScript类型转换(最全总结篇)
    前言系列首发于公众号『前端进阶圈』,若不想错过更多精彩内容,请“星标”一下,敬请关注公众号最新消息。深度剖析之由浅入深揭秘JavaScript类型转换(最全总结篇)值类型转换将值从一种类型转换为另一种类型通常称为类型转换,分为隐式强制类型转换和显示强制类型转换。两者的区别在于......
  • 每日总结
    7月6日:今天更为深入的学习了大道至简的第四章,让我感觉到了不一样的java,沟通,人与人之间的沟通是必不可少的,我们要合力完成某个项目便需要沟通。开发项目也需要与客户沟通,知道在各个阶段都想干什么,能干什么,而不是一味的埋头。......
  • 2023.7.7 集训总结
    2023.7.7集训总结期末考试已经结束,文化课的同学们也已经放假,竞赛也停课集训了一段时间。现对这段时间的集训进行总结。CFCF的两场Div1或多或少地体现了我的缺陷:深入思考太慢,分析太久,在OI赛制可能还足够,但是在只有两个小时的CF赛制中却出现了问题,简单的T1要50分钟才能AC,导致T2......
  • 7.7总结
    今天上午起床之后刷了会抖音,并没有像昨天说的那样,去检查idea连接的数据库是否正确,看了会java视频,中午随便吃了点,下午做了会pta,学了一小会前端的知识,然后晚上八点参加部门所拉赞助的活动,参加完就刷视频,然后睡觉......
  • 20230706巴蜀暑期集训测试总结
    T1我是个大聪明!一眼矩乘。构造转移矩阵构造了3.5h!最开始以为只有\(15\times15\),直接手打。写到一半发现不一定四种颜色都有,是\(52\times52\)的,这时候狗被脑子吃了,还想手打,于是就打到了3h。差不多打了一大半,脑子终于把狗还回来了,意识到就算打完也不可能调得出来,就开始另辟蹊径,......
  • 20230707巴蜀暑期集训测试总结
    T1SPFA就能过!给我震惊到了。可以斜率优化。对每个站点维护一个凸包。\[f(x)=Ax^2+Bx+C\\dp_{v,q}=\min_{i=0}^{p}\{dp_{u,i}+f(p-i)\}\\(i,dp_{x,i}+Ai^2-Bi)\]T2考场想了想区间dp,有点思路但是时间不多了有点慌,打个暴搜直接跑。相当于将位置当作第二关键字比较,最大的数......
  • ajax & json 总结
    1.1.1摘要Ajax技术的核心是XMLHttpRequest对象(简称XHR),可以通过使用XHR对象获取到服务器的数据,然后再通过DOM将数据插入到页面中呈现。虽然名字中包含XML,但Ajax通讯与数据格式无关,所以我们的数据格式可以是XML或JSON等格式。XMLHttpRequest对象用于在后台与服务器交换数据,具体作用......
  • 部署集群出现问题总结
    部署集群出现问题总结1,未在已配置的存储库中找到任何parcel在装cdh的时候遇到了问题,配置完parcel存储库以后页面提示:未在已配置的存储库中找到任何parcel。尝试在更多选项下添加一个自定义存储库。否则,您可能只能继续使用包默认的parcel存储库目录是cd/opt/cloudera/parc......
  • Java-基本语法回顾总结[109-126]
    怎么拆分微服务DDD领域驱动设计什么是中台项目怎么保证敏捷开发消息队列选型RocketMQ事务消息实现ZK为什么能作为注册中心RocketMQ底层实现原理消息队列如何保证可靠传输消息队列的作用死信队列和延时队列是什么如何保证消息的高速读写epoll和poll的......