• 洛谷


    https://www.luogu.org/problemnew/show/P1219

    一开始朴素检查对角线就TLE了,给对角线编码之后压缩了13倍时间?

    找了很久的bug居然是&&写成了&&&,我喷了。

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    
    bool cused[14];
    bool zxused[30];
    bool yxused[30];
    
    //bool g[14][14];
    
    int ans[30];
    int atop=0;
    
    int n;
    int cnt=0;
    
    inline int get_zx_id(int r,int c){
        //int ans=r-c+n;
        //printf("r=%d c=%d zid=%d
    ",r,c,ans);
        return r-c+n;
    }
    
    inline int get_yx_id(int r,int c){
        int rc=n+1-c;
        //int ans=r-rc+n;
        //printf("r=%d c=%d yid=%d
    ",r,c,ans);
        return r-rc+n;
    }
    
    void dfs(int r){
        if(r>n){
            cnt++;
            if(cnt<=3){
                for(int i=0;i<atop;i++){
                    printf("%d%c",ans[i]," 
    "[i==atop-1]);
                }
            }
        }
    
        for(int j=1;j<=n;j++){
            if(cused[j]==0&&zxused[get_zx_id(r,j)]==0&&yxused[get_yx_id(r,j)]==0){
                cused[j]=1;
                zxused[get_zx_id(r,j)]=1;
                yxused[get_yx_id(r,j)]=1;
                //g[r][j]=1;
                //ans[atop++]=r;
                ans[atop++]=j;
                dfs(r+1);
                atop-=1;
                //g[r][j]=0;
                zxused[get_zx_id(r,j)]=0;
                yxused[get_yx_id(r,j)]=0;
                cused[j]=0;
            }
        }
    }
    
    int main(){
        scanf("%d",&n);
    
        /*for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                printf("%2d ",get_zx_id(i,j));
            }
            printf("
    ");
        }
    
        printf("
    ");
    
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                printf("%2d ",get_yx_id(i,j));
            }
            printf("
    ");
        }
    
        printf("
    ");*/
    
        int r=1;
        for(int j=1;j<=n;j++){
            cused[j]=1;
            zxused[get_zx_id(r,j)]=1;
            yxused[get_yx_id(r,j)]=1;
            ans[atop++]=j;
            dfs(r+1);
            atop-=1;
            yxused[get_yx_id(r,j)]=0;
            zxused[get_zx_id(r,j)]=0;
            cused[j]=0;
        }
        printf("%d
    ",cnt);
    }
  • 相关阅读:
    MySQL主从数据库同步延迟问题解决(转)
    Python2.6升级Python2.7
    Socket网络编程
    Python 面向对象进阶
    Python类基础知识(面向对象基础)
    shell脚本中出现^M
    Centos6下Python3的编译安装
    Python成长之路(常用模块学习)
    SVN使用总结
    xshell锁屏
  • 原文地址:https://www.cnblogs.com/Yinku/p/10658556.html
Copyright © 2020-2023  润新知