zoukankan      html  css  js  c++  java
  • HDU 6341 Let Sudoku Rotate

    #include<bits/stdc++.h>
    using namespace std;
    #define rep(i,a,b) for(int i=a;i<=b;++i)
    #define ms(arr,a) memset(arr,a,sizeof arr)
    #define debug(x) cout<<"< "#x" = "<<x<<" >"<<endl
    char s[16][17],tmp[4][5];
    void rot(int x,int y)
    {
        for(int i=0;i<4;++i)
            for(int j=0;j<4;++j)
            tmp[i][j]=s[4*x-1-j][4*y-4+i];
        for(int i=0;i<4;++i)
            for(int j=0;j<4;++j)
            s[4*x-4+i][4*y-4+j]=tmp[i][j];
    }
    bool judge(int x,int y)
    {
        int a[20];
        for(int i=4*x-4;i<4*x;++i)
        {
            ms(a,0);
            for(int j=0;j<4*y;++j)
            {
                if(a[s[i][j]]>0)return false;
                a[s[i][j]]++;
            }
        }
        for(int i=4*y-4;i<4*y;++i)
        {
            ms(a,0);
            for(int j=0;j<4*x;++j)
            {
                if(a[s[j][i]]>0)return false;
                a[s[j][i]]++;
            }
        }
        return true;
    }
    int ans;
    void dfs(int x,int y,int now)
    {
        if(now>=ans)return;
        if(x==5){ans=min(ans,now);return;}
        if(y==5){dfs(x+1,1,now);return;}
        for(int i=0;i<4;++i)
        {
            if(judge(x,y))dfs(x,y+1,now+i);
            rot(x,y);
        }
    }
    int main()
    {
        int T;scanf("%d",&T);
        while(T--)
        {
            ans=100;
            for(int i=0;i<16;++i)scanf("%s",s[i]);
            for(int i=0;i<16;++i)
                for(int j=0;j<16;++j)
            {
                if(isdigit(s[i][j]))s[i][j]-=48;
                else s[i][j]-=55;
            }
            dfs(1,1,0);
            printf("%d
    ",ans);
        }
    }
    
  • 相关阅读:
    ios录音
    ios 音乐播放
    ios程序播放音频文件
    ios摇一摇截屏代码
    加速计
    蓝牙4.0实现及原理
    物理仿真
    iOS 监听耳机变化
    删除缓存
    宏定义加参数
  • 原文地址:https://www.cnblogs.com/maoruimas/p/9626628.html
Copyright © 2011-2022 走看看