bzoj 3109: [cqoi2013]新数独【dfs】
按3x3的小块dfs,填数的时候直接满足所有条件即可
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=15;
int a[N][N],ans[N][N];
char b[N][N],c[N][N];
bool v[5][5][N],h[N][N],l[N][N];
char read()
{
char p=getchar();
while(p!='^'&&p!='v'&&p!='<'&&p!='>')
p=getchar();//cerr<<p<<endl;
return p;
}
bool ok(int x,int y,int i)
{//cerr<<b[x][y-1]<<" "<<x<<" "<<y<<" "<<i<<" "<<a[x][y-1]<<endl;
if(h[x][i]||l[y][i])
return 0;
if(y%3!=1)
{
if(b[x][y-1]=='>'&&a[x][y-1]<i)
return 0;
if(b[x][y-1]=='<'&&a[x][y-1]>i)
return 0;
}
if(x%3!=1)
{
if(c[x-1][y]=='^'&&a[x-1][y]>i)
return 0;
if(c[x-1][y]=='v'&&a[x-1][y]<i)
return 0;
}
return 1;
}
void dfs(int p,int q,int x,int y)
{
if(ans[1][1])
return;
if(p==3)
{
for(int i=1;i<=9;i++)
for(int j=1;j<=9;j++)
ans[i][j]=a[i][j];
return;
}
for(int i=1;i<=9;i++)
if(!v[p][q][i]&&ok(p*3+x,q*3+y,i))
{
v[p][q][i]=1,h[p*3+x][i]=1,l[q*3+y][i]=1,a[p*3+x][q*3+y]=i;
if(q==2&&x==3&&y==3)
dfs(p+1,0,1,1);
else if(x==3&&y==3)
dfs(p,q+1,1,1);
else if(y==3)
dfs(p,q,x+1,1);
else
dfs(p,q,x,y+1);
v[p][q][i]=0,h[p*3+x][i]=0,l[q*3+y][i]=0,a[p*3+x][q*3+y]=0;
}
}
int main()
{
for(int i=0;i<3;i++)
{
for(int j=0;j<6;j++)
b[i*3+1][j/2*3+j%2+1]=read();
for(int j=1;j<=9;j++)
c[i*3+1][j]=read();
for(int j=0;j<6;j++)
b[i*3+2][j/2*3+j%2+1]=read();
for(int j=1;j<=9;j++)
c[i*3+2][j]=read();
for(int j=0;j<6;j++)
b[i*3+3][j/2*3+j%2+1]=read();
}
// for(int i=1;i<=9;i++)
// {
// for(int j=1;j<=9;j++)
// cerr<<c[i][j];
// cerr<<endl;
// }
dfs(0,0,1,1);
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
printf("%d ",ans[i][j]);
puts("");
}
return 0;
}
bzoj 3109: [cqoi2013]新数独【dfs】的更多相关文章
- bzoj 3109: [cqoi2013]新数独
#include<cstdio> #include<iostream> using namespace std; ][],li[][],xi[][],a[][],bh[][], ...
- 3109. [CQOI2013]新数独【DFS】
Description Input 输入一共15行,包含一个新数独的实例.第奇数行包含左右方向的符号(<和>),第偶数行包含上下方向的符号(^和v). Output 输出包含9行,每行 ...
- B3109 [cqoi2013]新数独 搜索dfs
就是基于普通数独上的一点变形,然后就没什么了,普通数独就是进行一边dfs就行了. 题干: 题目描述 输入格式 输入一共15行,包含一个新数独的实例.第奇数行包含左右方向的符号(<和>),第 ...
- bzoj 3105: [cqoi2013]新Nim游戏 异或高消 && 拟阵
3105: [cqoi2013]新Nim游戏 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 535 Solved: 317[Submit][Stat ...
- BZOJ3109: [cqoi2013]新数独
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3109 搜索一遍.读入注意一下.. #include<cstring> #inclu ...
- CQOI2013 新数独
传送门 这道题也是很暴力的搜索啊…… 因为数独一开始全是空的,只有许许多多的大小限制条件,那也没必要纠结从哪开始搜索了,直接暴力搜索之后判断一下是否合法. 这题最恶心的是读入.现学了一招判断点在哪个块 ...
- 【搜索】bzoj3109 [cqoi2013]新数独
搜索,没什么好说的.要注意读入. Code: #include<cstdio> #include<cstdlib> using namespace std; ][]= {{,, ...
- BZOJ 3105 [CQOI2013]新Nim游戏 ——线性基
[题目分析] 神奇的题目,两人都可以第一次取走足够多堆的石子. nim游戏的规则是,如果异或和为0,那么就先手必输,否则先手有必胜策略. 所以只需要剩下一群异或和为0就可以了. 先排序,线性基扫一遍即 ...
- BZOJ 3105: [cqoi2013]新Nim游戏
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3105 题意是要取一些数使得剩余的数xor和的子集不为0 拟阵.求解极大线性无关组.贪心从大到小 ...
随机推荐
- MAC上Nuclide的安装
MAC上Nuclide的安装 本文版权归作者全部,如需转载请联系孟祥月 CSDN博客:http://blog.csdn.net/mengxiangyue 独立博客:http://mengxiangyu ...
- 增强版的RecycleViewAdapter,能够直接使用
在Android的项目中.须要大量的列表组件来显示数据.在之前的项目中一直使用的是ListView 组件,可是在最新的V7包中出现了能后替代ListView的组件RecycleView. 所以在新的项 ...
- UUID GUID
http://baike.baidu.com/link?url=xkck9gR5bzOx0oBKP1qNJwGGq3IO56V4i8cg9zTSpSDMVBMA0F7jr0AdkQTGyk7F0FGj ...
- SQL面试练习(MySql)
创建测试数据库: /*如果已经存在此数据库,先删除*/ drop database if exists sqltest ; /*创建并设置编码为UTF-8*/ create database sqlt ...
- appium安装报错但运行成功
npm install -g appium ERR! fetch failed https://registry.npmjs.org/appium-uiauto/-/appium-uiauto-1. ...
- Android GUI系统学习1:Gralloc
Gralloc模块是从Android Eclair(android 2.1)開始增加的一个HAL模块,Gralloc的含义为是Graphics Alloc(图形分配).他对上为libui提供服务,为其 ...
- POJ2155 Matrix 二维线段树
关键词:线段树 二维线段树维护一个 维护一个X线段的线段树,每个X节点维护一个 维护一个Y线段的线段树. 注意,以下代码没有PushDownX.因为如果要这么做,PushDownX时,由于当前X节点的 ...
- (linux)schedule_delayed_work()
原文地址:schedule_delayed_work()用法作者:Valley 第一篇 工作队列 在Linux内核中,对下半部(或者说推后执行的工作)的处理方式有好几种,包括BH( ...
- PHP——巧用PHP函数array_merge()合并数组
前言 返回联系人列表,包含所有的字母,之前返回的是存在这个联系人才会返回对应的大写字母,后面更改了要求要返回所有的字母从A-Z.PHP内置的一些函数活用起来,真的很省劲! 步骤 一般这时候大家可能直接 ...
- poj 1724 ROADS 解题报告
题目链接:http://poj.org/problem?id=1724 题目意思:给出一个含有N个点(编号从1~N).R条边的有向图.Bob 有 K 那么多的金钱,需要找一条从顶点1到顶点N的路径(每 ...