zoukankan      html  css  js  c++  java
  • [BZOJ3109] [cqoi2013]新数独

    这几天做到好多爆搜题啊...

    和靶形数独一样的套路,bh[i][z],bl[i][z],num[i][z]数组判断该行/列/3*3方格是否填过z这个数

    然而因为for循环没学好(找规律太烦),输入就一行一行读了

    代码:

     1 #include<cstdio>
     2 #include<queue>
     3 #include<iostream>
     4 #include<cstring>
     5 using namespace std;
     6 inline int read(){
     7     int ans=0,f=1;char chr=getchar();
     8     while(!isdigit(chr)){if(chr=='-') f=-1;chr=getchar();}
     9     while(isdigit(chr)){ans=(ans<<3)+(ans<<1)+chr-48;chr=getchar();}
    10     return ans*f;
    11 }char h[20][20],l[20][20];int num[15][15],bh[15][15],bl[15][15];
    12 inline int get(int x,int y){
    13     if(x<=3&&y<=3) return 1;
    14     if(x<=6&&y<=3) return 2;
    15     if(x>6&&y<=3) return 3;
    16     if(x<=3&&y<=6) return 4;
    17     if(x<=6&&y<=6) return 5;
    18     if(y<=6) return 6;
    19     if(x<=3) return 7;
    20     if(x<=6) return 8;
    21     return 9;
    22 }int ANS[10][10];
    23 inline int check(int x,int y,int z){if(bh[x][z]||bl[y][z]||num[get(x,y)][z]) return 0;return 1;}
    24 inline void init(int x,int y,int z) {num[get(x,y)][z]=bh[x][z]=bl[y][z]=1;}
    25 inline void outit(int x,int y,int z){num[get(x,y)][z]=bh[x][z]=bl[y][z]=0;}
    26 inline int check_lr(int x,int y,int z){
    27     if(y%3==1)return 1;
    28     if(h[x][y-1]=='<') return ANS[x][y-1]<z;
    29     else return ANS[x][y-1]>z;
    30 }inline int check_ud(int x,int y,int z){
    31     if(x%3==1)return 1;
    32     if(l[x-1][y]=='v') return ANS[x-1][y]>z;
    33     else return ANS[x-1][y]<z;
    34 }inline void OUTPUT(){for(int i=1;i<=9;i++,puts(""))for(int j=1;j<=9;j++) printf("%d ",ANS[i][j]);}
    35 void dfs(int x,int y){
    36     if(x==10){OUTPUT();exit(0);}
    37     if(y==10){dfs(x+1,1);return;}
    38     for(int i=1;i<=9;i++)
    39         if(check(x,y,i)&&check_lr(x,y,i)&&check_ud(x,y,i))
    40             ANS[x][y]=i,init(x,y,i),dfs(x,y+1),outit(x,y,i);
    41 }int main(){
    42     for(int i=1;i<=9;i++) {if(i%3==0) continue;cin>>h[1][i];}
    43     for(int i=1;i<=9;i++) cin>>l[1][i];
    44     for(int i=1;i<=9;i++) {if(i%3==0) continue;cin>>h[2][i];}
    45     for(int i=1;i<=9;i++) cin>>l[2][i];
    46     for(int i=1;i<=9;i++) {if(i%3==0) continue;cin>>h[3][i];}
    47     for(int i=1;i<=9;i++) {if(i%3==0) continue;cin>>h[4][i];}
    48     for(int i=1;i<=9;i++) cin>>l[4][i];
    49     for(int i=1;i<=9;i++) {if(i%3==0) continue;cin>>h[5][i];}
    50     for(int i=1;i<=9;i++) cin>>l[5][i];
    51     for(int i=1;i<=9;i++) {if(i%3==0) continue;cin>>h[6][i];}
    52     for(int i=1;i<=9;i++) {if(i%3==0) continue;cin>>h[7][i];}
    53     for(int i=1;i<=9;i++) cin>>l[7][i];
    54     for(int i=1;i<=9;i++) {if(i%3==0) continue;cin>>h[8][i];}
    55     for(int i=1;i<=9;i++) cin>>l[8][i];
    56     for(int i=1;i<=9;i++) {if(i%3==0) continue;cin>>h[9][i];}
    57     dfs(1,1);
    58     return 0;
    59 }
  • 相关阅读:
    7.数组的扩展
    8.对象的扩展
    6.函数的扩展
    5.数值的扩展
    2.变量的解构赋值
    1.let 和 const 命令
    CTE(With As)
    delphi使用ADO在sql数据库存取图片的方法
    使用Razor生成Word
    Redis基础总结
  • 原文地址:https://www.cnblogs.com/zhenglw/p/10516111.html
Copyright © 2011-2022 走看看