您的位置:首页 > 其它

HDU3584 Cube

2015-10-25 10:17 274 查看


Cube

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)

Total Submission(s): 1822    Accepted Submission(s): 946


Problem Description

Given an N*N*N cube A, whose elements are either 0 or 1. A[i, j, k] means the number in the i-th row , j-th column and k-th layer. Initially we have A[i, j, k] = 0 (1 <= i, j, k <= N). 

We define two operations, 1: “Not” operation that we change the A[i, j, k]=!A[i, j, k]. that means we change A[i, j, k] from 0->1,or 1->0. (x1<=i<=x2,y1<=j<=y2,z1<=k<=z2).

0: “Query” operation we want to get the value of A[i, j, k].

 

Input

Multi-cases.

First line contains N and M, M lines follow indicating the operation below.

Each operation contains an X, the type of operation. 1: “Not” operation and 0: “Query” operation.

If X is 1, following x1, y1, z1, x2, y2, z2.

If X is 0, following x, y, z.

 

Output

For each query output A[x, y, z] in one line. (1<=n<=100 sum of m <=10000)

 

Sample Input

2 5
1 1 1 1 1 1 1
0 1 1 1
1 1 1 1 2 2 2
0 1 1 1
0 2 2 2

 

Sample Output

1
0
1

 

#include<stdio.h>
#include<string.h>
using namespace std;
typedef struct node
{
int x;
int y;
int z;
}node;
node l[10001],r[10001];
int main()
{
int n,m;
int x,x1,y1,z1;
int i;
while(~scanf("%d%d",&n,&m))
{
memset(l,0,sizeof(l));
memset(r,0,sizeof(r));
int t=0;
while(m--)
{
scanf("%d",&x);
if(x)
{
scanf("%d%d%d%d%d%d",&l[t].x,&l[t].y,&l[t].z,&r[t].x,&r[t].y,&r[t].z);
t++;
}
else
{
scanf("%d%d%d",&x1,&y1,&z1);
int counts=0;
for(i=0;i<t;i++)
{
if(x1>=l[i].x&&x1<=r[i].x&&y1>=l[i].y&&y1<=r[i].y&&z1>=l[i].z&&z1<=r[i].z)
{
counts++;
}
}
printf("%d\n",counts%2);
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hdu