Uva10001 Garden of Eden

简介: Uva10001 Garden of Eden
#include <stdio.h>inta[40], f[10], A[40], n;
intd[10][3] = {{0, 0, 0},
    {0, 0, 1},
    {0, 1, 0},
    {0, 1, 1},
    {1, 0, 0},
    {1, 0, 1},
    {1, 1,0},
    {1, 1, 1}};
charb[40];
intdfs(cur)
{
inti;
if (cur==n-1||cur==n) {
for (i=0; i<8; i++) {
if (f[i] ==a[cur] &&d[i][0] ==A[cur-1] &&d[i][1] ==A[cur] &&d[i][2] ==A[cur+1]) {
if (cur==n-1&&!dfs(cur+1))
return0;
elsereturn1;
            }
        }
    } else {
for (i=0; i<8; i++) {
if (f[i] ==a[cur] &&d[i][0] ==A[cur-1] &&d[i][1] ==A[cur]) {
A[cur+1] =d[i][2];
if (dfs(cur+1))
return1;
            }
        }
    }
return0;
}
intmain()
{
inti, k, id, ok;
#ifndef ONLINE_JUDGEfreopen("d:\\uva_in.txt", "r", stdin);
#endifwhile (scanf("%d%d%s", &id, &n, b+1) ==3) {
for (i=1; i<=n; i++)
a[i] =b[i] -'0';
k=id;
for (i=0; i<8; i++) {
f[i] =k%2;
k/=2;
        }
ok=1;
for (i=0; i<8; i++) {
if (a[1] ==f[i]) {
A[0] =d[i][0];
A[1] =d[i][1];
A[2] =d[i][2];
A[n] =A[0];
A[n+1] =A[1];
if (dfs(2)) {
ok=0;
break;
                }
            }
        }
if (ok)
printf("GARDEN OF EDEN\n");
elseprintf("REACHABLE\n");
    }
return0;
}
目录
相关文章
概率dp - UVA 11021 Tribles
Tribles  Problem's Link:  http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33059   Mean:  有k个细菌,每个细菌只能存活一天,在死去之前可能会分裂出0,1,2....n-1个细菌,对应的概率为p0,p1,p2....pn-1。
817 0
|
C++
UVA 之10010 - Where's Waldorf?
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunnyYoona/article/details/24863879 ...
703 0
|
存储 固态存储
|
机器学习/深度学习
uva 11538 Chess Queen
点击打开链接 题意:给定一个n*m的矩阵,问有多少种方法放置两个相互攻击的皇后?规定在同一行同一列和同对角线的能够相互攻击 思路: 1 先考虑同一行的情况,n行就有n种情况,每一行有m*(m-1)种,总的是n*m*(m-1); 2 考虑同...
811 0
uva 1203 Argus
点击打开链接uva 1203 思路: 优先队列 分析: 1 题目要求前k个事件的编号,我们利用优先队列来维护即可 2 优先队列保存的是一个struct,因此我们需要重载 s.
1289 0
uva 10730 - Antiarithmetic?
点击打开链接uva 10730 思路:枚举等差中项 分析: 1 给定一个n个数的序列判断是否有等差子序列 2 很明显我们如果要判断是否有等差子序列的话,只要去判断是否有长度为3的等差子序列 3 对于n
834 0
uva 1388 - Graveyard
点击打开链接uva1388 思路:数学 分析: 1 我们把原先的n个墓碑看成是园内的正n变形,现在的n+m个墓碑看成是园内的正n+m变形。那么通过画图我们可以知道当这个两个正多边形有一个点重合的时候移动的总距离最小 2 那么我们把这个圆进...
1004 0
UVA3295
题意:给出一个a*b的网格,在网格上取不共线的三点构成三角形,求三角形总数。分析:就是一一道简单的组合数计算题目,设总结点数为n,则取三个节点的个数为C(n,3),然后减去横向、竖向、斜向的三点共线的个数即可,斜线三点共线等价于所枚举的矩形的长宽成倍数关系,即gcd不为1 代码如下: #incl...
649 0