//HDOJ 3682 To Be an Dream Architect 暴力
/*
题意:
有一个n*n的魔方,每次去除一排,问最后剩几个
思路:
只有1000次删除,记录所有删除的点,排序后去重,数据比较水...
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
#define N 1000005
int T,n,m;
struct node{
int x;
int y;
int z;
}s[N];
int cmp(const void *a,const void *b){
if((*(node *)a).x != (*(node *)b).x)
return (*(node *)a).x - (*(node *)b).x;
if((*(node *)a).y != (*(node *)b).y)
return (*(node *)a).y - (*(node *)b).y;
if((*(node *)a).z != (*(node *)b).z)
return (*(node *)a).z - (*(node *)b).z;
}
int main(){
char a,b;
int i,j,k,cnt;
scanf("%d",&T);
while(T--){
scanf("%d %d",&n,&m);
getchar();
cnt = 0;
node p ;
while(m--){
scanf("%c=%d,%c=%d",&a,&i,&b,&j);
getchar();
if(a>b){
swap(a,b);
swap(i,j);
}
if(a=='X' && b == 'Y'){
p.x = i;
p.y = j;
for(k = 1; k <= n; ++k){
p.z = k;
s[cnt++] = p;
}
}
else if(a=='Y' && b == 'Z'){
p.y = i;
p.z = j;
for(k = 1; k <= n; ++k){
p.x = k;
s[cnt++] = p;
}
}
else if(a=='X' && b=='Z'){
p.x = i;
p.z = j;
for(k = 1; k <= n; ++k){
p.y = k;
s[cnt++] = p;
}
}
}
qsort(s,cnt,sizeof(s[0]),cmp);
int num = 0;
if(cnt)
num = 1;
for(i = 1; i < cnt; ++i){
if(s[i].x != s[i-1].x || s[i].y != s[i-1].y || s[i].z != s[i-1].z)
num++;
}
printf("%d\n",num);
}
return 0;
}
HDOJ 3682 To Be an Dream Architect 暴力
最新推荐文章于 2016-08-28 18:19:30 发布