给一个由4*4个4*4的小格组成数独,这些数独是由一个块逆时针旋转得来的,所以要还原的话就模拟出顺时针的过程,先把里面的字母转化成数字,然后从第一个块开始枚举,每个dfs和之前枚举的已经满足条件的块,然后先枚举每一行的每块,这一行枚举完了去枚举下一行的状态,一直枚举到最后一块为止。

#include<map>
#include<set>
#include<ctime>
#include<cmath>
#include<stack>
#include<queue>
#include<string>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define lowbit(x) (x & (-x)) typedef unsigned long long int ull;
typedef long long int ll;
const double pi = 4.0*atan(1.0);
const int inf = 0x3f3f3f3f;
const int maxn = 1e5+;
const int maxm = ;
const int mod = 1e9+;
using namespace std; int n, m, tol, T;
char s[];
int e[][];
int t[][];
bool vis[];
int ans; void init() {
ans = inf;
memset(e, , sizeof e);
memset(t, , sizeof t);
} void change(int x, int y) {
memset(t, , sizeof t);
for(int i1=*x-, j2=*y-; i1<=*x; i1++, j2++) {
for(int j1=*y-, i2=*x; j1<=*y; j1++, i2--) {
t[i1][j1] = e[i2][j2];
}
}
for(int i=*x-; i<=*x; i++) {
for(int j=*y-; j<=*y; j++) {
e[i][j] = t[i][j];
}
}
} bool check(int x, int y) {
for(int i=*x-; i<=*x; i++) {
memset(vis, , sizeof vis);
for(int j=; j<=*y; j++) {
if(vis[e[i][j]]) return false;
vis[e[i][j]] = true;
}
}
for(int j=*y-; j<=*y; j++) {
memset(vis, , sizeof vis);
for(int i=; i<=*x; i++) {
if(vis[e[i][j]]) return false;
vis[e[i][j]] = true;
}
}
return true;
} void dfs(int x, int y, int cnt) {
if(y>) {
ans = check(, ) ? min(ans, cnt) : ans;
return ;
}
if(cnt > ans) return ;
for(int i=; i<; i++) {
if(i) change(x, y);
if(!check(x, y)) continue;
if(x == ) dfs(, y+, cnt + i);
else dfs(x+, y, cnt + i);
}
change(x, y);
} int main() {
scanf("%d", &T);
while(T--) {
init();
char ch;
for(int i=; i<=; i++) {
scanf("%s", s+);
for(int j=; j<=; j++) {
ch = s[j];
e[i][j] = isdigit(ch) ? ch - '' : ch - 'A' + ;
}
}
// for(int i=1; i<=16; i++) for(int j=1; j<=16; j++) printf("%d%c", e[i][j], j==16 ? '\n' : ' ');
// change(2, 1);
// cout << endl;
// for(int i=1; i<=16; i++) for(int j=1; j<=16; j++) printf("%d%c", e[i][j], j==16 ? '\n' : ' ');
dfs(, , );
printf("%d\n", ans);
}
return ;
}

HDU6341 Let Sudoku Rotate (杭电多校4J)的更多相关文章

  1. 可持久化线段树的学习(区间第k大和查询历史版本的数据)(杭电多校赛第二场1011)

    以前我们学习了线段树可以知道,线段树的每一个节点都储存的是一段区间,所以线段树可以做简单的区间查询,更改等简单的操作. 而后面再做有些题目,就可能会碰到一种回退的操作.这里的回退是指回到未做各种操作之 ...

  2. 2018 Multi-University Training Contest 1 杭电多校第一场

    抱着可能杭电的多校1比牛客的多校1更恐怖的想法 看到三道签到题 幸福的都快哭出来了好吗 1001  Maximum Multiple(hdoj 6298) 链接:http://acm.hdu.edu. ...

  3. 2018 Multi-University Training Contest 9 杭电多校第九场 (有坑待补)

    咕咕咕了太久  多校博客直接从第三场跳到了第九场orz 见谅见谅(会补的!) 明明最后看下来是dp场 但是硬生生被我们做成了组合数专场…… 听说jls把我们用组合数做的题都用dp来了遍 这里只放了用组 ...

  4. 2018 Multi-University Training Contest 2 杭电多校第二场

    开始逐渐习惯被多校虐orz  菜是原罪 1004  Game    (hdoj 6312) 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6312 虽然披着 ...

  5. 2019杭电多校&CCPC网络赛&大一总结

    多校结束了, 网络赛结束了.发现自己还是太菜了,多校基本就是爆零和签到徘徊,第一次打这种高强度的比赛, 全英文,知识点又很广,充分暴露了自己菜的事实,发现数学还是很重要的.还是要多刷题,少玩游戏. 网 ...

  6. HDU 4941 Magical Forest(map映射+二分查找)杭电多校训练赛第七场1007

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4941 解题报告:给你一个n*m的矩阵,矩阵的一些方格中有水果,每个水果有一个能量值,现在有三种操作,第 ...

  7. HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是 ...

  8. HDU 5831 Rikka with Parenthesis II (贪心) -2016杭电多校联合第8场

    题目:传送门. 题意:T组数据,每组给定一个长度n,随后给定一个长度为n的字符串,字符串只包含'('或')',随后交换其中两个位置,必须交换一次也只能交换一次,问能否构成一个合法的括号匹配,就是()( ...

  9. HDU 5821 Ball (贪心排序) -2016杭电多校联合第8场

    题目:传送门. 题意:T组数据,每组给定一个n一个m,在给定两个长度为n的数组a和b,再给定m次操作,每次给定l和r,每次可以把[l,r]的数进行任意调换位置,问能否在转换后使得a数组变成b数组. 题 ...

随机推荐

  1. 设置永久环境变量linux

    ========================================================================== http://www.cnblogs.com/Bi ...

  2. css 别人找的css特效

    https://blog.csdn.net/m0_37809478/article/details/76619207

  3. Eclipse导入工程后出现中文乱码

    Eclipse之所以会出现乱码问题是因为eclipse编辑器选择的编码规则是可变的.一般默认都是UTF-8或者GBK,当从外部导入的一个工程时,如果该工程的编码方式与eclipse中设置的编码方式不同 ...

  4. 动态SQL1

    If标签 动态SQL可以说是MyBatis最强大之处了,这块的应用主要有四个方面if,choose,trim和foreach,接下来先说说if. 顾名思义,if是用来判断条件的,现在假设我们有个需求, ...

  5. log4j2.xml

    <?xml version="1.0" encoding="UTF-8"?> <configuration status="info ...

  6. Yii2控制台程序最佳实践

    模板工程标准的控制台程序要素: (1)完整明确文字提示用户(并且使用红,绿,黄三种颜色标识提示文字:红色为错误相关,绿色为成功相关,黄色为进行中提示) (2)告知用户运行进度(完成任务的一部分即显示进 ...

  7. Lodop打印如何隐藏table某一列

    Lodop打印超文本,既可以打印页面上存在的某些部分,也可以自己组织超文本和css样式传入,有些需要打印的页面表格里,会有一列有编辑删除等按钮,用于对于数据库数据的操作,在打印的时候,这一列由于不属于 ...

  8. 阿里云 ECS 安全组

    以前在案例云买的ECS我一般都是 连上 ssh,然后把网站文件拿上去 ,安装好需要的环境 然后就可以顺利的打开网站了,这次帮一个朋友买的阿里云ECS让我蒙了, 一切都准备好了 网站打不开 防火墙也检查 ...

  9. 学习 Spring (七) Resource

    Spring入门篇 学习笔记 Resource: Spring 针对资源文件的统一接口 UrlResource: URL 对应的资源,根据一个 URL 地址即可构建 ClassPathResource ...

  10. hdu-1711(kmp)

    题意:给你两串数字,问你第二串数字第一次出现在第一串数字的位置,没有输出-1: 解题思路:其是就是字符串匹配,就是这里是数字匹配,把char数组改成int型就可以了: 代码: #include< ...