hdu4334 Trouble 合并集合可以降低复杂度阿啦啦

博客探讨了一种在解决HDU4334问题时,通过合并集合来优化算法复杂度的方法。首先将两个集合合并为一个,然后对剩余的大集合进行优化。通过排序和双指针技术,实现当从三个集合中各取一个数时,有效地判断和调整元素。然而,博主在实现过程中遇到了int64类型的溢出问题,耗费了不少时间。
摘要由CSDN通过智能技术生成

我觉得这一题方法很好的,但是之前完全没有碰到过,也没有想到,这么简单直接降低复杂度的方法


先将两个集合合并成1个集合,合并两个(s1,s2),即每个集合里n^2个数,还剩一个n个数的集合

这样还剩超时的

然后再优化,这个也想不到啊。。


sum=三个集合里面各取一个数,

小集合里面就直接枚举,

把两个大集合s1 s2从小到大排序,

一个里面从小到大开始枚举,一个里面从大到小开始枚举,

那么sum>0时,就把大的--

sum<0时,就把小的++


最后我被int64坑了一上午


#include<iostream>
#include<cmath>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;

__int64 s[6][205],s1[40005],s2[40005];

int main()
{
    int n,t;
    __int64 i,j,flag,k,l,sum;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(i=0;i<5;i++)
        {
            for(j=0;j<n;j+&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值