• [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 }
  • 相关阅读:
    ios开发,NSFileManager的使用
    iOS开发-常用第三方开源框架介绍(绝对够你用了)
    iOS开发常用第三方开源框架
    对佛学和个人发展的思考总结(十八)心流、非人情网络、穷人、人生机会、平衡计分卡
    php 判断字符串中包含重复相同的次数 array_count_values str_split max 函数组合使用
    存储过程一次性返回多个数据集,逻辑层与前端处理
    动态改变div背景颜色
    在asp.net mvc应用中使用vue.js
    angularjs单一页面中高频访问相同web api,出现阻塞和等待
    Windows安装配置OpenGrok
  • 原文地址:https://www.cnblogs.com/zhenglw/p/10516111.html
Copyright © 2020-2023  润新知