点我看题目

题意 : 其实我也说不太清楚题意,就是给你很多方块,每放一块方块,都要和前一块有一个面相接,如果不相接,就输出NO,并输出是第几个方块不相接的。如果满足每一个都和前边相接,那就判断所有没有与其他方块相接的面的个数。

思路 : 每输入一个就判断前一个的上下左右前后中距离为1的有没有这个点,如果没有就记录下位置,用于输出NO,如果有的话,就记录下来,然后减去两个面,因为两个方块相接,有两个面要被减去,ans先初始化为6*m,相当于先初始化为所有的面。

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <set>
#include <algorithm> using namespace std ; //int dir[3][6] = {{-1,0,1,0,0,0},{0,-1,0,1,0,0},{0,0,0,0,-1,1}} ;
int dirx[] = {-,,,,,};
int diry[] = {,-,,,,};
int dirz[] = {,,,,-,}; struct node
{
int x,y,z ;
}temp1,temp2;
bool operator <(node a,node b)
{
if(a.x == b.x)
{
if(a.y == b.y)
{
return a.z < b.z ;
}
return a.y < b.y ;
}
return a.x < b.x ;
}
int main()
{
set<node>sett ;
int n ,m,cas = ;
scanf("%d",&n) ;
while(n--)
{
scanf("%d",&m) ;
int ans = m* ;
int flag = - ;
sett.clear() ;
scanf("%d,%d,%d",&temp1.x,&temp1.y,&temp1.z) ;
sett.insert(temp1) ;
for(int i = ; i <= m ; i++)
{
scanf("%d,%d,%d",&temp1.x,&temp1.y,&temp1.z) ;
if(flag == - && sett.find(temp1) != sett.end())
flag = i ;
if(flag == -)
{
int cnt = ;
for(int j = ; j < ; j++)
{
temp2.x = temp1.x+dirx[j] ;
temp2.y = temp1.y+diry[j] ;
temp2.z = temp1.z+dirz[j] ;
if(sett.find(temp2) != sett.end()) cnt++ ;
}
if(cnt) ans -= cnt* ;
else flag = i ;
sett.insert(temp1) ;
}
}
if(flag != -) printf("%d NO %d\n",cas++,flag) ;
else printf("%d %d\n",cas++,ans) ;
}
return ;
}

POJ 3792 Area of Polycubes(思维)的更多相关文章

  1. poj 3792 Area of Polycubes

    http://poj.org/problem?id=3792 #include <cstdio> #include <cstring> #include <cmath&g ...

  2. poj 3792 Area of Polycubes (简单模拟)

    题目 题意:在三维坐标系中,给定n个立方体的中心坐标,立方体的边长为1,按照输入顺序,后来输入的必须和之前输入的立方体有公共的边. 而且,不能和之前输入的立方体相同. 如果满足条件,输出表面积.如果不 ...

  3. poj 1654 Area 多边形面积

    /* poj 1654 Area 多边形面积 题目意思很简单,但是1000000的point开不了 */ #include<stdio.h> #include<math.h> ...

  4. poj 1265 Area 面积+多边形内点数

    Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5861   Accepted: 2612 Description ...

  5. Area of Polycubes

    http://poj.org/problem?id=3792 题意:给出n个小正方体的中心坐标,求构成的多重小立方体的表面积.要求输入的下一个小正方体必须与之前的正方体有一个面是相交的.如果不满足条件 ...

  6. poj 1265 Area (Pick定理+求面积)

    链接:http://poj.org/problem?id=1265 Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions:  ...

  7. poj 1654 Area (多边形求面积)

    链接:http://poj.org/problem?id=1654 Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions:  ...

  8. poj 1265 Area( pick 定理 )

    题目:http://poj.org/problem?id=1265 题意:已知机器人行走步数及每一步的坐标   变化量 ,求机器人所走路径围成的多边形的面积.多边形边上和内部的点的数量. 思路:1.以 ...

  9. poj 1654 Area(多边形面积)

    Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17456   Accepted: 4847 Description ...

随机推荐

  1. Android Timer用法

    Android考虑到线程安全问题,不允许在线程中执行UI线程,在Android中,有一个类:android.os.Handler,这个可以实现各处线程间的消息传递.先看段代码,这个实例化了一个Hand ...

  2. WCF学习笔记 -- 基本概念

    WCF是实现WebService的一种微软提出的技术,整合了.Remote, .NET及ASP.NET服务的一种框架.是Windows Communication Foundation的缩写.WebS ...

  3. c# 简单的通用基础字典

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using Alif.Ali ...

  4. FreeCodeCamp-JS基础部分

    ---恢复内容开始--- .pop()     将数组末尾的元素移除     var removedFromMyArray=myArray.pop()     将myArray数组的最后一个元素移除并 ...

  5. 生成随机字符串(UUID方法)

    这是另一种用UUID生成随机字符串的方法. public class RandomGenerator{ private int length; public void setLength(int le ...

  6. URAL 1024 Permutations(LCM)

    题意:已知,可得出 P(1) = 4, P(2) = 1, P(3) = 5,由此可得出 P(P(1)) = P(4) = 2. And P(P(3)) = P(5) = 3,因此.经过k次如上变换, ...

  7. js中的一些零碎方法

    ajax表单提交: $.post("do_login", f.serializeArray(), function(data) { if (data.status + " ...

  8. mysql 主从同步 Last_SQL_Error

    参考文章: http://kerry.blog.51cto.com/172631/277414/ http://hancang2010.blog.163.com/blog/static/1824602 ...

  9. JS滑动门,JQuery滑动门

    <a href="#" id="one1" onmouseover="setTab('one',1,2)" class="h ...

  10. flex 弹性盒子模型一些案例.html

    Flexbox是布局模块,而不是一个简单的属性,它包含父元素和子元素的属性. Flex元素是可以让你的布局根据浏览器的大小变化进行自动伸缩. 自适应导航 <ul class="navi ...