hdu3682

来源:互联网 发布:青岛基督教软件下载 编辑:程序博客网 时间:2024/05/18 14:26
/*
分析:
    15MS,还上第一版了-、-I,不过代码敲得自己都觉得恶心。。。
    简单说下思路,代码还是别看了-、-I:
        初始赋值ans=n*m,既取消了n*m个点,然后看看哪些点被多
    取消了,再让ans--就行了。(不过这个判断要准了,比如当前边
和前面的x条边都相交与同一点,那么ans只--一次)


                                  2012-10-08
*/










#include"stdio.h"#include"string.h"#include"stdlib.h"struct A{int x,y,z;int flag;}eage[1011];struct B{int x,y,z;}dot[1011];int cmp(const void *a,const void *b){struct B *c,*d;c=(struct B *)a;d=(struct B *)b;if(c->x!=d->x)return c->x-d->x;else if(c->y!=d->y)return c->y-d->y;elsereturn c->z-d->z;}int main(){intT;int n,m;int i,l;char c1,c2;int a,b;int x_t,y_t,z_t,temp,flag;int ans;scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);getchar();for(i=0;i<m;i++){scanf("%c=%d,%c=%d",&c1,&a,&c2,&b);getchar();if(c1=='X'){if(c2=='Y')eage[i].x=a,eage[i].y=b,eage[i].z=-1;elseeage[i].x=a,eage[i].y=-1,eage[i].z=b;}else if(c1=='Y'){if(c2=='X')eage[i].x=b,eage[i].y=a,eage[i].z=-1;elseeage[i].x=-1,eage[i].y=a,eage[i].z=b;}else if(c1=='Z'){if(c2=='Y')eage[i].x=-1,eage[i].y=b,eage[i].z=a;elseeage[i].x=b,eage[i].y=-1,eage[i].z=a;}if(a<=0 || a>n || b<=0 || b>n)eage[i].flag=1;}ans=n*m;if(eage[0].flag)ans-=n;for(i=1;i<m;i++){if(eage[i].flag){ans-=n;continue;}flag=0;temp=0;for(l=0;l<i;l++){if(eage[i].flag)continue;if(eage[i].x==eage[l].x && eage[i].y==eage[l].y && eage[i].z==eage[l].z){flag=1;break;}else if(eage[i].x==eage[l].x && eage[i].x!=-1){if(eage[i].z==-1 && eage[l].y==-1){dot[temp].x=eage[i].x;dot[temp].y=eage[i].y;dot[temp].z=eage[l].z;temp++;}else if(eage[i].y==-1 && eage[l].z==-1){dot[temp].x=eage[i].x;dot[temp].y=eage[l].y;dot[temp].z=eage[i].z;temp++;}}else if(eage[i].y==eage[l].y && eage[i].y!=-1){if(eage[i].z==-1 && eage[l].x==-1){dot[temp].y=eage[i].y;dot[temp].x=eage[i].x;dot[temp].z=eage[l].z;temp++;}else if(eage[i].x==-1 && eage[l].z==-1){dot[temp].y=eage[i].y;dot[temp].x=eage[l].x;dot[temp].z=eage[i].z;temp++;}}else if(eage[i].z==eage[l].z && eage[i].z!=-1){if(eage[i].x==-1 && eage[l].y==-1){dot[temp].z=eage[i].z;dot[temp].y=eage[i].y;dot[temp].x=eage[l].x;temp++;}else if(eage[i].y==-1 && eage[l].x==-1){dot[temp].z=eage[i].z;dot[temp].y=eage[l].y;dot[temp].x=eage[i].x;temp++;}}}if(flag)ans-=n;else{if(temp==0)continue;qsort(dot,temp,sizeof(dot[0]),cmp);ans--;for(l=1;l<temp;l++){if(dot[l].x==dot[l-1].x && dot[l].y==dot[l-1].y && dot[l].z==dot[l-1].z)continue;elseans--;}}}printf("%d\n",ans);}return 0;}


原创粉丝点击