bzoj 3109: [cqoi2013]新数独

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 int ha[10][10],li[10][10],xi[10][10],a[10][10],bh[10][10],bl[10][10],kg;
 5 char ch[5];
 6 bool pan(int x,int y,int i)
 7 {
 8     if(ha[x][i]||li[y][i]||xi[(x-1)/3*3+(y-1)/3][i])
 9       return 0;
10     if((y-1)%3!=0&&(bh[x][y]^(i>a[x][y-1])))
11       return 0;
12     if((x-1)%3!=0&&(bl[x][y]^(i>a[x-1][y])))
13       return 0;
14     return 1;
15 }
16 void dfs(int x,int y)
17 {
18     //if(a[1][1]==4&&a[1][2]==9&&a[1][3]==1&&a[1][4]==7&&a[1][5]==3&&a[1][6]==6&&a[1][7]==5&&a[1][8]==2)
19       //{
20         //printf(" ");
21       //}
22     if(kg)
23       return;
24     if(y==10)
25       {
26         x++;
27         y=1;
28       }
29     if(x==10)
30       {
31         kg=1;
32         for(int i=1;i<=9;i++)
33           {
34             for(int j=1;j<=9;j++)
35               {
36                  printf("%d",a[i][j]);
37                  if(j!=9)
38                    printf(" ");
39               }
40             printf("\n");
41             }
42         return;
43       }
44     for(int i=1;i<=9;i++)
45       if(pan(x,y,i))
46         {
47             a[x][y]=i;
48             ha[x][i]=1;
49             li[y][i]=1;
50             xi[(x-1)/3*3+(y-1)/3][i]=1;
51             dfs(x,y+1);
52             ha[x][i]=0;
53             li[y][i]=0;
54             xi[(x-1)/3*3+(y-1)/3][i]=0;
55         }
56 }
57 int main()
58 {
59     for(int i=1;i<=9;i++)
60       {
61         for(int j=1;j<9;j++)
62           if(j%3)
63             {
64               scanf("%s",ch);
65               if(ch[0]==‘<‘)
66                 bh[i][j+1]=1;
67               else
68                 bh[i][j+1]=0;
69             }
70         if(i%3)
71           for(int j=1;j<=9;j++)
72             {
73                 scanf("%s",ch);
74                 if(ch[0]==‘^‘)
75                   bl[i+1][j]=1;
76                 else
77                   bl[i+1][j]=0;
78             }
79       }
80     dfs(1,1);
81     return 0;
82 }

一个非常恶心的搜索。

时间: 2024-10-12 13:08:22

bzoj 3109: [cqoi2013]新数独的相关文章

[cqoi2013]新数独

[cqoi2013]新数独 题目 INPUT 输入一共15行,包含一个新数独的实例.第奇数行包含左右方向的符号(<和>),第偶数行包含上下方向的符号(^和v). OUTPUT 输出包含9行,每行9个1~9的数字,以单个空格隔开.输入保证解惟一. SAMPLE INPUT < >   > <  > < v v ^ ^ v v ^ ^ ^ < <   > <  > < ^ ^ ^ v ^ ^ ^ v v < <  

BZOJ 3105: [cqoi2013]新Nim游戏

3105: [cqoi2013]新Nim游戏 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1064  Solved: 624[Submit][Status][Discuss] Description 传统的Nim游戏是这样的:有一些火柴堆,每堆都有若干根火柴(不同堆的火柴数量可以不同).两个游戏者轮流操作,每次可以选一个火柴堆拿走若干根火柴.可以只拿一根,也可以拿走整堆火柴,但不能同时从超过一堆火柴中拿.拿走最后一根火柴的游戏者胜利. 本题的游

bzoj3109 [cqoi2013]新数独

Description Input 输入一共15行,包含一个新数独的实例.第奇数行包含左右方向的符号(<和>),第偶数行包含上下方向的符号(^和v). Output 输出包含9行,每行9个1~9的数字,以单个空格隔开.输入保证解惟一. Sample Input < > > < > < v v ^ ^ v v ^ ^ ^< < > < > < ^ ^ ^ v ^ ^ ^ v v< < < < >

BZOJ 3105: [cqoi2013]新Nim游戏 [高斯消元XOR 线性基]

以后我也要用传送门! 题意:一些数,选择一个权值最大的异或和不为0的集合 终于有点明白线性基是什么了...等会再整理 求一个权值最大的线性无关子集 线性无关子集满足拟阵的性质,贪心选择权值最大的,用高斯消元判断是否和已选择的线性相关 每一位记录pivot[i]为i用到的行 枚举要加入的数字的每一个二进制为1的位,如果有pivot[i]那么就异或一下(消元),否则pivot[i]=这个数并退出 如果最后异或成0了就说明线性相关... #include <iostream> #include &l

BZOJ 3105 [CQOI2013]新Nim游戏 ——线性基

[题目分析] 神奇的题目,两人都可以第一次取走足够多堆的石子. nim游戏的规则是,如果异或和为0,那么就先手必输,否则先手有必胜策略. 所以只需要剩下一群异或和为0就可以了. 先排序,线性基扫一遍即可(保留最多的不为0的堆) [代码] #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <set> #include <map&g

【搜索】bzoj3109 [cqoi2013]新数独

搜索,没什么好说的.要注意读入. Code: #include<cstdio> #include<cstdlib> using namespace std; const int num[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

bzoj 3105: [cqoi2013]新Nim游戏【线性基】

nim游戏的先手必胜条件是所有堆的火柴个数异或和为0,也就是找一个剩下火柴堆数没有异或和为0的子集的方案,且这个方案保证剩下的火柴个数总和最大 然后我就不会了,其实我到现在也不知道拟阵是个什么玩意-- 详见:https://blog.csdn.net/wyfcyx_forever/article/details/39477673 总之用线性基维护即可 #include<iostream> #include<cstdio> #include<algorithm> usin

bzoj3109【CQOI2013】新数独

3109: [cqoi2013]新数独 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 365  Solved: 229 [Submit][Status][Discuss] Description Input 输入一共15行,包括一个新数独的实例. 第奇数行包括左右方向的符号(<和>),第偶数行包括上下方向的符号(^和v). Output 输出包括9行,每行9个1~9的数字,以单个空格隔开. 输入保证解惟一. Sample Input <

BZOJ 3105:[cqoi2013]新Nim游戏

BZOJ 3105:[cqoi2013]新Nim游戏 题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3105 题目大意:在传统的Nim取石子游戏中做了改变:两人刚开始可以取走任意堆石子(不包括全部)后进行传统游戏,问先手能否必胜,若必胜求出刚开始最少取多少石子. 线性基 传统Nim游戏先手必胜的前提条件为$a_0 \lxor a_1 \lxor a_2 \lxor ... \lxor a_{n-1} \neq 0$. 故若欲使新Nim游