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;
    }
    
    
  • 相关阅读:
    服务器状态码
    QuerySet中添加Extra进行SQL查询
    django配置一个网站建设
    MySQL数据库查询中的特殊命令
    125. Valid Palindrome
    121. Best Time to Buy and Sell Stock
    117. Populating Next Right Pointers in Each Node II
    98. Validate Binary Search Tree
    91. Decode Ways
    90. Subsets II
  • 原文地址:https://www.cnblogs.com/xzz_233/p/7590838.html
Copyright © 2011-2022 走看看