首页
IT
登录
6mi
u
盘
搜
搜 索
IT
1022
1022
xiaoxiao
2021-12-02
26
#include
<stdio.h>
#include
<math.h>
#include
<stdlib.h>
int
t;
int
n;
typedef
struct
SPoiter
{
char
value
[
4
]; }
SPoiter
;
typedef
struct
SCube
{
SPoiter
s_poiter
;
int
i_identifier
;
int
i_add_identifier
[
4
];
int
i_reduce_identifier
[
4
]; }
SCube
;
SCube
tmp[
100
];
int
i_size[
4
][
2
];
int
stack[
100
];
int
i_stack_len;
int
fFindCubeId(
int
identifer) {
if
(identifer
==
0
)
{
return
0
;
}
for
(
int
i
=
1
;
i
<
n;++i)
{
if
(tmp[i].
i_identifier
==
identifer)
{
return
i;
}
}
return
-
1
; }
int
cb_fSort(
const
void
*
a,
const
void
*
b) {
return
(*(
unsigned
long
int
*)(&((
SCube
*)a)->
s_poiter
))
>
(*(
unsigned
long
int
*)(&((
SCube
*)b)->
s_poiter
)); }
int
fCheck() {
int
i_use
=
0
;
i_stack_len
=
0
;
i_size[
0
][
0
]=i_size[
0
][
1
]=i_size[
1
][
0
]=i_size[
1
][
1
]=i_size[
2
][
0
]=i_size[
2
][
1
]=i_size[
3
][
0
]=i_size[
3
][
1
]=
0
;
stack[i_stack_len++]
=
0
;
//存他的index
,更容易回去查
while
(i_stack_len
!=
0
)
{
++i_use;
int
i_id
=
stack[--i_stack_len];
for
(
int
i
=
0
;i
<
4
;++i)
{
int
i_cube_id
=
fFindCubeId(tmp[i_id].
i_add_identifier
[i]);
if
(i_cube_id
==
-
1
)
{
return
0
;
}
if
(i_cube_id
!=
0
)
{
SPoiter
next
=
tmp[i_id].
s_poiter
;
++next.
value
[i];
if
(next.
value
[i]
>
i_size[i][
0
])
{
i_size[i][
0
]
=
next.
value
[i];
}
if
((*(
unsigned
long
int
*)&(tmp[i_cube_id].
s_poiter
))
==
0
)
{
if
(tmp[i_cube_id].
i_reduce_identifier
[i]
!=
tmp[i_id].
i_identifier
)
{
return
0
;
}
tmp[i_cube_id].
s_poiter
=
next;
stack[i_stack_len++]
=
i_cube_id;
}
else
if
((*(
unsigned
long
int
*)&next)
!=
(*(
unsigned
long
int
*)&tmp[i_cube_id].
s_poiter
))
{
return
0
;
}
tmp[i_cube_id].
i_reduce_identifier
[i]
=
0
;
}
i_cube_id
=
fFindCubeId(tmp[i_id].
i_reduce_identifier
[i]);
if
(i_cube_id
==
-
1
)
{
return
0
;
}
if
(i_cube_id
!=
0
)
{
SPoiter
next
=
tmp[i_id].
s_poiter
;
--next.
value
[i];
if
(next.
value
[i]
<
i_size[i][
1
])
{
i_size[i][
1
]
=
next.
value
[i];
}
if
((*(
unsigned
long
int
*)&(tmp[i_cube_id].
s_poiter
))
==
0
)
{
if
(tmp[i_cube_id].
i_add_identifier
[i]
!=
tmp[i_id].
i_identifier
)
{
return
0
;
}
tmp[i_cube_id].
s_poiter
=
next;
stack[i_stack_len++]
=
i_cube_id;
}
else
if
((*(
unsigned
long
int
*)&next)
!=
(*(
unsigned
long
int
*)&tmp[i_cube_id].
s_poiter
))
{
return
0
;
}
tmp[i_cube_id].
i_add_identifier
[i]
=
0
;
}
}
}
if
(i_use
!=
n)
{
return
0
;
}
qsort(tmp,n,
sizeof
(
SCube
),cb_fSort);
for
(
int
i
=
0
;i
<
n-
1
;++i)
{
if
((*(
unsigned
long
int
*)&tmp[i].
s_poiter
)
==
(*(
unsigned
long
int
*)&tmp[i+
1
].
s_poiter
))
{
return
0
;
}
}
return
1
; }
int
main() {
SPoiter
s_zero
=
{
0
};
scanf(
"%d"
,&t);
while
(t-->
0
)
{
scanf(
"%d"
,&n);
SCube
*
p_cube
=
tmp;
for
(
int
i
=
0
;i
<
n;++i,++p_cube)
{
scanf(
"%d
%d
%d
%d
%d
%d
%d
%d
%d"
,&p_cube->
i_identifier
,
&p_cube->
i_add_identifier
[
0
],
&p_cube->
i_reduce_identifier
[
0
],
&p_cube->
i_add_identifier
[
1
],
&p_cube->
i_reduce_identifier
[
1
],
&p_cube->
i_add_identifier
[
2
],
&p_cube->
i_reduce_identifier
[
2
],
&p_cube->
i_add_identifier
[
3
],
&p_cube->
i_reduce_identifier
[
3
]);
p_cube->
s_poiter
=
s_zero;
}
if
(fCheck()==
0
)
{
printf(
"Inconsistent\n"
);
}
else
{
printf(
"%d\n"
,(i_size[
0
][
0
]-i_size[
0
][
1
]+
1
)
*(i_size[
1
][
0
]-i_size[
1
][
1
]+
1
)
*(i_size[
2
][
0
]-i_size[
2
][
1
]+
1
)
*(i_size[
3
][
0
]-i_size[
3
][
1
]+
1
));
}
}
return
0
; }
转载请注明原文地址: https://ju.6miu.com/read-679814.html
专利
最新回复
(
0
)