zoukankan      html  css  js  c++  java
  • hdu4334 Trouble 合并集合可以降低复杂度阿啦啦

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


    先将两个集合合并成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++)
                    scanf("%I64d",&s[i][j]);
            }
            for(i=0,k=0;i<n;i++)
            {
                for(j=0;j<n;j++,k++)
                {
                    s1[k]=s[1][i]+s[0][j];
                    s2[k]=s[2][i]+s[3][j];
                }
            }
            sort(s1,s1+k);
            sort(s2,s2+k);
            l=k-1;
            for(i=0,flag=0;i<n;i++)
            {
                j=l;
                k=0;
                while(j>=0 && k<=l)
                {
                    sum=(s1[j]+s2[k]+s[4][i]);
                    if(!sum)
                    {
                        flag=1;
                        break;
                    }
                    else if(sum>0) j--;
                    else k++;
                }
                if(flag) break;
            }
            if(flag) printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
    


  • 相关阅读:
    开发人员创建智能客户端的十大理由
    OpenStack 学习资料总结
    VirtualBox启用嵌套VTx/AMDV
    element ui table 表尾合计行 错位优化
    群友酒方,夜夜十次郎
    跨域 Better
    Unity 重命名一个字段,同时不丢失其序列化的值
    C++ static 变量
    编译安装apache2.4
    centos设置crontab定时执行shell脚本
  • 原文地址:https://www.cnblogs.com/riskyer/p/3246576.html
Copyright © 2011-2022 走看看