Poj 1022

传送门:http://poj.org/problem?id=1022

计算四维结合体体积,类比三维

由于不确定编号,用了一个map存储

有两种情况输出Inconsistent,1、两个单位四维体相结合的面不为相对的面,2、单位四维体没有全部连通

最后计算体积用四个方向维度的长度相乘。

这里计算维度的长度用一个深搜,每碰到一个不为0的面相应维度+1,最后维度/2+1

这个方法其实我还没太懂……

 1 #include<iostream>
 2 #include<cstring>
 3 #include<map>
 4 using namespace std;
 5
 6 struct node{
 7     int side[8];
 8 };
 9
10 bool flag;
11 int t,n;
12 int w,x,y,z;
13 int m;
14 int begin;
15 int maxx;
16 int marked[10000];
18 map<int,node> cube;
19 map<int,node>::iterator it;
20
21 void dfs(int i){
22     if(marked[i]){
23         return;
24     }
25     if(m==n){
26         return;
27     }
28     marked[i]=1;
29     m++;
30     for(int k=0;k<8;k++){
31         if(cube[i].side[k]){
32             if(k==0||k==1)w++;
33             else if(k==2||k==3)x++;
34             else if(k==4||k==5)y++;
35             else if(k==6||k==7)z++;
36             dfs(cube[i].side[k]);
37         }
38     }
39     return;
40 }
41
42 int main(){
43     cin>>t;
44     while(t--){
45         cin>>n;
46         cube.clear();
47         for(int i=0;i<n;i++){
48             int num;
49             cin>>num;
50             for(int j=0;j<8;j++){
51                 cin>>cube[num].side[j];
52             }
53         }
54         flag=true;
55         for(it=cube.begin();it!=cube.end();it++){
56             for(int j=0;j<8;j++){
57                 if(it->second.side[j]){
58                     if(j%2&&cube[it->second.side[j]].side[j-1]!=it->first){
59                         flag=false;
60                         break;
61                     }
62                     else if(j%2==0&&cube[it->second.side[j]].side[j+1]!=it->first){
63                         flag=false;
64                         break;
65                     }
66                 }
67             }
68             if(!flag){
69                 cout<<"Inconsistent"<<endl;
70                 break;
71             }
72         }
73         if(!flag){
74             continue;
75         }
76         memset(marked,0,sizeof(marked));
77         m=0;
78         it=cube.begin();
79         begin=it->first;
80         w=0;x=0;y=0;z=0;
81         dfs(begin);
82         if(m!=n){
83             flag=false;
84             cout<<"Inconsistent"<<endl;
85             continue;
86         }
87         if(flag){
88             cout<<(w/2+1)*(x/2+1)*(y/2+1)*(z/2+1)<<endl;
89         }
90     }
91 } 
时间: 2024-10-26 00:44:44

Poj 1022的相关文章

图论 500题——主要为hdu/poj/zoj

转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并查集======================================[HDU]1213   How Many Tables   基础并查集★1272   小希的迷宫   基础并查集★1325&&poj1308  Is It A Tree?   基础并查集★1856   More i

POJ百道水题列表

以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight Moves1101 Gamblers1204 Additive equations 1221 Risk1230 Legendary Pokemon1249 Pushing Boxes 1364 Machine Schedule1368 BOAT1406 Jungle Roads1411 Annive

ACM训练方案-POJ题目分类

ACM训练方案-POJ题目分类 博客分类: 算法 ACM online Judge 中国: 浙江大学(ZJU):http://acm.zju.edu.cn/ 北京大学(PKU):http://acm.pku.edu.cn/JudgeOnline/ 杭州电子科技大学(HDU):http://acm.hdu.edu.cn/ 中国科技大学(USTC):http://acm.ustc.edu.cn/ 北京航天航空大学(BUAA)http://acm.buaa.edu.cn/oj/index.php 南京

转载:poj题目分类(侵删)

转载:from: POJ:http://blog.csdn.net/qq_28236309/article/details/47818407 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K–0.50K:中短代码:0.51K–1.00K:中等代码量:1.01K–2.00K:长代码:2.01K以上. 短:1147.1163.1922.2211.2215.2229.2232.2234.2242.2245.2262.2301.2309.2313.2334.2346.2348

poj题库分类

初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (1)图的深度优先遍历和广度优先遍历.     (2)最短路径算法(dijkstra,bellman-ford,floyd,hea

POJ题目(转)

http://www.cnblogs.com/kuangbin/archive/2011/07/29/2120667.html 初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (

Poj 题目分类

初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (1)图的深度优先遍历和广度优先遍历.     (2)最短路径算法(dijkstra,bellman-ford,floyd,hea

POJ题目分类(转)

初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (1)图的深度优先遍历和广度优先遍历.     (2)最短路径算法(dijkstra,bellman-ford,floyd,hea

POJ刷题

这篇文章会持续更新, 记录我所有AC的POJ题目. PS:我所有的POJ代码都存在我的github上. 1000 A+B 水题不说. 1001 Exponentiation 求一个数的n次方,用高精度,注意细节. 1002 487-3279 题目描述:设计程序,按照功能机上的9键键位把字母电话号码转化成数字电话号码,并将电话号码格式化(原本的电话号码格式里可能出现无数个短横线-(=_=#)) 对于给定输入,输出有重复的电话号码,并给出重复的次数. 输入格式:第一行一整数n,表示电话号码的数量,接