1022

    xiaoxiao2021-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)