糯米

TI DaVinci, gstreamer, ffmpeg
随笔 - 167, 文章 - 0, 评论 - 47, 引用 - 0
数据加载中……

POJ 2180 Bale Figures 有意思的水题

思路:
开一个 64*64*64 大小的数组,记录该位置是否有放置方块。
开一个 25000 大小的数组,记录每个方块的位置。
然后每放一个方块,首先看该位置能不能放,然后再看6个方向是否有其他方块,如果有的话,就要调整总面积的和。

#include <stdio.h>

char placed[64][64][64];
struct node {
    
int x, y, z;
}
 box[25032];

int main()
{
    
int i, j, x, y, z, sum, N;
    
char str[16];

    freopen(
"e:\\test\\in.txt""r", stdin);

    scanf(
"%d"&N);
    box[
1].x = 32;
    box[
1].y = 32;
    box[
1].z = 0;
    placed[
32][32][0= 1;
    sum 
= 5;
    
for (i = 2; i <= N; i++{
        scanf(
"%d%s"&j, str);
        x 
= box[j].x;
        y 
= box[j].y;
        z 
= box[j].z;
        
switch (str[0]) {
            
case 'L': x--break;
            
case 'R': x++break;
            
case 'F': y--break;
            
case 'B': y++break;
            
case 'O': z++break;
            
case 'U': z--break;
        }

        
if (z < 0)
            
break;
        
if (placed[x][y][z])
            
break;
        box[i].x 
= x;
        box[i].y 
= y;
        box[i].z 
= z;
        placed[x][y][z] 
= 1;
        sum 
+= 6;
        
if (placed[x - 1][y][z])
            sum 
-= 2;
        
if (placed[x + 1][y][z])
            sum 
-= 2;
        
if (placed[x][y - 1][z])
            sum 
-= 2;
        
if (placed[x][y + 1][z])
            sum 
-= 2;
        
if (!z)
            sum
--;
        
else if (placed[x][y][z - 1])
            sum 
-= 2;
        
if (placed[x][y][z + 1])
            sum 
-= 2;
    }


    printf(
"%d\n", i <= N ? -1 : sum);

    
return 0;
}

posted on 2010-03-08 12:52 糯米 阅读(252) 评论(0)  编辑 收藏 引用 所属分类: POJ


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理