| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
wa...#include <stdio.h>
#include <string.h>
#include <stdio.h>
int m_block=0;
bool used[101]={0};
int block[101][9];
int idx[20000];
int zuobiao[101][4];
int bb=0;
int weizhi[8][4]={
{1,0,0,0},
{-1,0,0,0},
{0,1,0,0},
{0,-1,0,0},
{0,0,1,0},
{0,0,-1,0},
{0,0,0,1},
{0,0,0,-1}};
int check_n(int n){
if (bb==1) return 0;
int index=idx[n];
used[n]=true;
for (int i=1;i<=8;++i){
int test=block[index][i];
if (test!=0 && used[test]==false) {
int shoud_be=i^1;
if (block[idx[test]][shoud_be]!=n) return bb=1;
else {
for (int j=0;j<4;++j){
zuobiao[test][j] = zuobiao[n][j]+weizhi[i-1][j];
}
check_n(test);
}
}
}
return 0;
}
int calc_v(){
int v=1;
for (int j=0;j<4;++j){
int min=4000,max=0;
for (int i=0;i<m_block;++i){
int index = block[i][0];
if (zuobiao[index][j]<min) min=zuobiao[index][j];
if (zuobiao[index][j]>max) max=zuobiao[index][j];
}
v = v*(max-min+1);
}
return v;
}
bool Inconsistent() {
if (bb==1) return true;
for (int i=0;i<m_block;++i) {
int index = block[i][0];
if (used[index]==false) return true;
}
return false;
}
int main () {
int m_case=0;
scanf("%d",&m_case);
while (m_case--) {
scanf("%d",&m_block);
memset(used,0,sizeof(used));
memset(block,0,sizeof(block));
memset(zuobiao,0,sizeof(zuobiao));
memset(idx,-1,sizeof(idx));
bb=0;
for (int i=0;i<m_block;++i) {
for (int j=0;j<=8;++j){
scanf("%d",&block[i][j]);
}
idx[block[i][0]]=i;
}
int first_id = block[0][0];
for (int i=0;i<4;++i){
zuobiao[first_id][i]=2000;
}
check_n(first_id);
if (Inconsistent()) {
printf("Inconsistent\n");
} else {
printf("%d\n",calc_v());
}
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator