zoukankan      html  css  js  c++  java
  • bzoj3139 [hnoi2013]比赛

    bzoj3139 [hnoi2013]比赛


    原题链接


    玄学DFS???

    首先,傻逼DFS,水出50分
    暴力出奇迹

    // It is made by XZZ
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    #define rep(a,b,c) for(rg int a=b;a<=c;a++)
    #define drep(a,b,c) for(rg int a=b;a>=c;a--)
    #define erep(a,b) for(rg int a=fir[b];a;a=nxt[a])
    #define il inline
    #define rg register
    #define vd void
    typedef long long ll;
    il int gi(){
        rg int x=0;rg char ch=getchar();
        while(ch<'0'||ch>'9')ch=getchar();
        while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
        return x;
    }
    int n,a[12],cnt;
    int sum,tot,x[46],y[46];
    il vd dfs(int now,int _sum){//第now场比赛
        if(now==cnt+1){if(sum==_sum)tot=tot==1000000006?0:tot+1;return;}
        if((cnt-now+1)*3+_sum<sum)return;
        //x胜
        if(a[x[now]]>2)a[x[now]]-=3,dfs(now+1,_sum+3),a[x[now]]+=3;
        //y胜
        if(a[y[now]]>2)a[y[now]]-=3,dfs(now+1,_sum+3),a[y[now]]+=3;
        //平手
        if(a[x[now]]&&a[y[now]])--a[x[now]],--a[y[now]],dfs(now+1,_sum+2),++a[x[now]],++a[y[now]];
    }
    int main(){
        n=gi();
        rep(i,1,n)a[i]=gi(),sum+=a[i];
        sort(a+1,a+1+n);
        rep(i,1,n)rep(j,i+1,n)x[++cnt]=i,y[cnt]=j;
        dfs(1,0);
        printf("%d
    ",tot);
        return 0;
    }
    

    正解参见ljh_2000大佬的blog。。。
    很久以前写的现在给忘了

    // It is made by XZZ
    #include<cstdio>
    #include<algorithm>
    #include<map>
    using namespace std;
    #define rep(a,b,c) for(rg int a=b;a<=c;a++)
    #define drep(a,b,c) for(rg int a=b;a>=c;a--)
    #define erep(a,b) for(rg int a=fir[b];a;a=nxt[a])
    #define il inline
    #define rg register
    #define vd void
    #define mod 1000000007
    typedef long long ll;
    il int gi(){
        rg int x=0;rg char ch=getchar();
        while(ch<'0'||ch>'9')ch=getchar();
        while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
        return x;
    }
    int n,A[12],cnt;
    int x[46],y[46];
    ll base[12];
    map<ll,ll>Map[11];
    map<ll,ll>::iterator it;
    il int dfs(int l,int r,int*lst){//第now场比赛
        if(l>=r){
        if(lst[l])return 0;
        if(l==n)return 1;
        int a[11];
        rep(i,1,n)a[i]=lst[i];
        sort(a+1,a+n+1);
        ll Hash=0;
        rep(i,1,n)Hash+=base[i]*a[i];
        it=Map[l+1].find(Hash);
        if(it!=Map[l+1].end())return it->second;
        int ret=dfs(l+1,n,a);
        Map[l+1][Hash]=ret;
        return ret;
        }
        int tot=0;
        if(lst[l]>2)lst[l]-=3,tot+=dfs(l,r-1,lst),tot%=mod,lst[l]+=3;
        if(lst[r]>2)lst[r]-=3,tot+=dfs(l,r-1,lst),tot%=mod,lst[r]+=3;
        if(lst[l]&&lst[r])--lst[l],--lst[r],tot+=dfs(l,r-1,lst),tot%=mod,++lst[l],++lst[r];
        return tot;
    }
    int main(){
        n=gi();
        rep(i,1,n)A[i]=gi();
        sort(A+1,A+n+1);
        base[0]=1;
        rep(i,1,n)base[i]=base[i-1]*29;
        printf("%d
    ",dfs(1,n,A));
        return 0;
    }
    
    
  • 相关阅读:
    1、安装electron
    Bootstrap fileinput v3.0(ssm版)
    Bootstrap fileinput v2.0(ssm版)
    网络概念
    win10远程桌面连接提示身份验证错误,要求的函数不受支持的解决方案
    Quartz 定时任务时间设置
    牛顿迭代法快速寻找平方根
    mysql 中出现:不能打开到主机的连接,在端口3306: 连接失败
    spring boot+mybatis+generator生成domain大小写问题
    Decoder is not a @Sharable handler, so can't be added or removed multiple times
  • 原文地址:https://www.cnblogs.com/xzz_233/p/7590838.html
Copyright © 2011-2022 走看看