【BZOJ 3109】【CQOI 2013】新数独
来源:互联网 发布:巨人网络数据分析 编辑:程序博客网 时间:2024/06/05 16:27
这道题真的只要模拟就行了。。。什么匹配啥的不需要。
其实可以发现,每个数和它周围四个数(同个九宫格内)都有大小关系的约束,这其实已经是一个非常强的约束了,因为从答案保证只有一组解可以看出来。
搜的时候把约束条件全部加上,当前格子与上面格子的大小关系、与左边格子的大小关系、行、列、九宫格不重复,然后就是等着搜出一组解直接输出就好了。
#include<cmath>#include<cstdio>#include<vector>#include<queue>#include<cstring>#include<iomanip>#include<stdlib.h>#include<iostream>#include<algorithm>#define ll long long#define inf 1000000000#define mod 1000000007#define N 10#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;const int id[10][10] ={{0,0,0,0,0,0,0,0,0,0},{0,1,1,1,2,2,2,3,3,3},{0,1,1,1,2,2,2,3,3,3},{0,1,1,1,2,2,2,3,3,3},{0,4,4,4,5,5,5,6,6,6},{0,4,4,4,5,5,5,6,6,6},{0,4,4,4,5,5,5,6,6,6},{0,7,7,7,8,8,8,9,9,9},{0,7,7,7,8,8,8,9,9,9},{0,7,7,7,8,8,8,9,9,9}};int f[N][N][N][N],res[N][N];int vis1[N][N],vis2[N][N],vis3[N][N];int i,j,k,xx,yy;char s[100];bool check(int x,int y,int num){ if (f[x][y][x][y-1] == -1 && num <= res[x][y-1]) return false; if (f[x][y][x][y-1] == 1 && num >= res[x][y-1]) return false; if (f[x][y][x-1][y] == -1 && num >= res[x-1][y]) return false; if (f[x][y][x-1][y] == 1 && num <= res[x-1][y]) return false; return true;}void print(){ int i,j; fo(i,1,9) { fo(j,1,8) printf("%d ",res[i][j]); printf("%d\n",res[i][9]); }}void dfs(int x,int y){ if (x == 10) {print(); exit(0);} int i; fo(i,1,9) if (!vis1[x][i] && !vis2[y][i] && !vis3[id[x][y]][i] && check(x,y,i)) { res[x][y] = i; vis1[x][i] = vis2[y][i] = vis3[id[x][y]][i] = 1; if (y == 9) dfs(x+1,1); else dfs(x,y+1); res[x][y] = 0; vis1[x][i] = vis2[y][i] = vis3[id[x][y]][i] = 0; }}int main(){ fo(k,1,3) fo(i,1,5) { if (i&1) { xx = (k-1)*3+i/2+1; yy = 2; fo(j,1,3) { scanf("%s",s); f[xx][yy][xx][yy-1] = s[0]=='<' ? -1 : 1; scanf("%s",s); f[xx][yy+1][xx][yy] = s[0]=='<' ? -1 : 1; yy += 3; } } else { xx = (k-1)*3+i/2; fo(j,1,9) { scanf("%s",s); f[xx+1][j][xx][j] = s[0]=='v' ? -1 : 1; } } } dfs(1,1);}
0 0
- BZOJ 3109 CQOI 2013 新数独
- 【BZOJ 3109】【CQOI 2013】新数独
- 【BZOJ 3105】【CQOI 2013】新Nim游戏
- 【BZOJ 3106】【CQOI 2013】棋盘游戏
- 【BZOJ 3107】【CQOI 2013】二进制a+b
- BZOJ 3107 [cqoi 2013] DP 解题报告
- 【BZOJ 3108】【CQOI 2013】图的逆变换
- BZOJ 3106 [cqoi 2013] 对抗搜索 解题报告
- BZOJ 3932(CQOI 2015) 题解
- 【BZOJ 4521】【CQOI 2016】手机号码
- bzoj 3930 CQOI 选数
- BZOJ 3105 CQOI 2013 新Nim游戏 && 2460 BeiJing 2011 元素 拟阵+线性基
- BZOJ 3505 CQOI 2014 数三角形 数学
- BZOJ 1303 CQOI 2009 中位数图 模拟
- BZOJ 3503 CQOI 2014 和谐矩阵 高斯消元
- 【模拟】【CQOI 2007】【bzoj 1258】三角形tri
- BZOJ 3504 CQOI 2014 危桥 最大流
- [BZOJ 3932][CQOI 2015]任务查询系统
- ADT 项目转为 As项目的时候出现如下错误
- wex5开发外卖app笔记
- MarkDown之typora
- CodeForces 620 E.New Year Tree(线段树)
- 解决 413 Request Entity Too Large
- 【BZOJ 3109】【CQOI 2013】新数独
- Matlab编程 入门(六)
- java_web 学习记录(七):jxl excel export(一)
- hadoop与spark的异同
- 微信内置浏览器不支持下载文件或应用解决方案——李帅醒博客
- repo 切换manifest
- rust 1.16.0 msvc link错误
- 深度神经网络发展历程全回顾:如何加速DNN运算?
- Web前端专业介绍