HDU3584 Cube

来源:互联网 发布:韩国作曲家甘雨知乎 编辑:程序博客网 时间:2024/06/06 15:13

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 51 1 1 1 1 1 10 1 1 11 1 1 1 2 2 20 1 1 10 2 2 2
 

Sample Output
101
 


#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;}





0 0
原创粉丝点击