zoukankan      html  css  js  c++  java
  • Bzoj5088 HDU 6000 Wash

    题目传送门

    呃这个不应该是一个简单的二分答案+贪心吗(似乎以前做过但是因为long long 卡了好久)

    我们考虑只洗衣服的情况,显然就是一个非常愚蠢的二分

    让后再来单独考虑烘干的情况,和上面一样也是一个二分

    最后考虑如何将两者的时间合并,显然,我们可以将所有衣服送出机器的时间存下来排序

    按照贪心原则,让最大值尽可能小,所以用最大的和最小的相加,依次类推。。。

    复杂度O(L+n lg L),结果非常玄学地拿了rank1(>_<)!,吊打priority_queue和手写堆,在HDU也有rank7

    #pragma GCC opitmize("O3")
    #pragma G++ opitmize("O3")
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #define LL long long
    using namespace std;
    LL a[2500010],b[2500010],ans=0;;
    int n,m,k,w[100010],d[100010],t1=0,t2=0; 
    inline int rd(int& x){
        char c=getchar(); x=0;
        for(;c>'9' || c<'0';c=getchar());
        for(;c<='9'&&c>='0';c=getchar()) x=(x<<3)+(x<<1)+c-48;
        return x;
    }
    inline int ok(int* s,LL x,int n){
        LL v=k;
        for(int i=1;i<=n && v>0;++i) v-=x/s[i];
        return v<=0;
    }
    inline void cal(int* w,LL* s,int n,LL x,int& t){
        for(int i=1;i<=n;++i)
            for(LL j=w[i];j<=x;j+=w[i]) s[++t]=j;
    }
    int main(){  
        rd(k); rd(n); rd(m);
        for(int i=1;i<=n;++i) rd(w[i]);
        for(int i=1;i<=m;++i) rd(d[i]);
        LL l=0,r=1ll<<62;
        for(LL M;l<r;){
            M=l+r>>1;
            if(ok(w,M,n)) r=M;
            else l=M+1;
        }
        cal(w,a,n,l,t1); sort(a+1,a+1+t1);
        l=0,r=1ll<<62;
        for(LL M;l<r;){
            M=l+r>>1;
            if(ok(d,M,m)) r=M;
            else l=M+1;
        }
        cal(d,b,m,l,t2); sort(b+1,b+1+t2);
        for(int i=1;i<=k;++i) ans=max(ans,a[i]+b[k-i+1]);
        printf("%lld
    ",ans);
    }
    HDU6000:

    #pragma GCC opitmize("O3")
    #pragma G++ opitmize("O3")
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #define LL long long
    using namespace std;
    LL a[2500010],b[2500010],ans=0;;
    int n,m,k,w[100010],d[100010],t1=0,t2=0; 
    inline int rd(int& x){
        char c=getchar(); x=0;
        for(;c>'9' || c<'0';c=getchar());
        for(;c<='9'&&c>='0';c=getchar()) x=(x<<3)+(x<<1)+c-48;
        return x;
    }
    inline int ok(int* s,LL x,int n){
        LL v=k;
        for(int i=1;i<=n && v>0;++i) v-=x/s[i];
        return v<=0;
    }
    inline void cal(int* w,LL* s,int n,LL x,int& t){
        for(int i=1;i<=n;++i)
            for(LL j=w[i];j<=x;j+=w[i]) s[++t]=j;
    }
    int _18520(){ 
        rd(k); rd(n); rd(m);
        for(int i=1;i<=n;++i) rd(w[i]);
        for(int i=1;i<=m;++i) rd(d[i]);
        LL l=0,r=1ll<<62;
        for(LL M;l<r;){
            M=l+r>>1;
            if(ok(w,M,n)) r=M;
            else l=M+1;
        }
        cal(w,a,n,l,t1); sort(a+1,a+1+t1);
        l=0,r=1ll<<62;
        for(LL M;l<r;){
            M=l+r>>1;
            if(ok(d,M,m)) r=M;
            else l=M+1;
        }
        cal(d,b,m,l,t2); sort(b+1,b+1+t2);
        for(int i=1;i<=k;++i) ans=max(ans,a[i]+b[k-i+1]);
        printf("%lld
    ",ans);
    }
    int main(){
        int T; scanf("%d",&T);
        for(int i=1;i<=T;++i){
            ans=t1=t2=0;
            printf("Case #%d: ",i); _18520();
        }
    }

  • 相关阅读:
    c#自动更新+安装程序的制作
    VS2013项目受源代码管理向源代码管理注册此项目时出错
    WinDbg配置和使用基础
    InstallShield Limited Edition for Visual Studio 2013 图文教程(教你如何打包.NET程序)
    PowerDesigner 如何生成数据库更新脚本
    用户故事(User Story)
    Troubleshooting Record and Playback issues in Coded UI Test
    Coded UI
    compare two oracle database schemas
    How to: Use Schema Compare to Compare Different Database Definitions
  • 原文地址:https://www.cnblogs.com/Extended-Ash/p/8312601.html
Copyright © 2011-2022 走看看