zoukankan      html  css  js  c++  java
  • HDU

    HDU - 3584
    Time Limit: 1000MS   Memory Limit: 65536KB   64bit IO Format: %I64d & %I64u

     Status

    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
     
    /*
    Author: 2486
    Memory: 5944 KB		Time: 202 MS
    Language: G++		Result: Accepted
    VJ RunId: 4328542		Real RunId: 14413386
    */
    //三维的与二维的一样,而二维的与一维的一样
    //具体解释。本博客中解答了题目这么做的原理
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    #include <queue>
    using namespace std;
    const int MAXN = 100 + 5;
    int C[MAXN][MAXN][MAXN];
    int N, M;
    
    int lowbit(int x) {
        return x & (-x);
    }
    
    void add(int x, int y, int z) {
        for(int i = x; i <= N; i += lowbit(i)) {
            for(int j = y; j <= N; j += lowbit(j)) {
                for(int k = z; k <= N; k += lowbit(k)) {
                    C[i][j][k] ++;
                }
            }
        }
    }
    int query(int x, int y, int z) {
        int ret = 0;
        for(int i = x; i > 0 ; i -= lowbit(i)) {
            for(int j = y; j > 0; j -= lowbit(j)) {
                for(int k = z; k > 0; k -= lowbit(k)) {
                    ret += C[i][j][k];
                }
            }
        }
        return ret & 1;
    }
    int X, x, y, z, x1, y1, z1, x2, y2, z2;
    int main() {
        while(~ scanf("%d%d", &N, &M)) {
            memset(C, 0, sizeof(C));
            while(M --) {
                scanf("%d", &X);
                if(X) {
                    scanf("%d%d%d%d%d%d", &x1, &y1, &z1, &x2, &y2, &z2);
                    x2 ++;
                    y2 ++;
                    z2 ++;
                    add(x1, y1, z1);
                    add(x1, y2, z1);
                    add(x1, y1, z2);
                    add(x1, y2, z2);
                    add(x2, y1, z1);
                    add(x2, y2, z1);
                    add(x2, y1, z2);
                    add(x2, y2, z2);
                } else {
                    scanf("%d%d%d", &x, &y, &z);
                    printf("%d
    ", query(x, y, z));
                }
            }
        }
        return 0;
    }
    

  • 相关阅读:
    步骤条 CSS样式
    CSS 常用样式集合(更新中。。。)
    jQuery对checkbox的各种操作
    bootstrap 模态框的动态复用
    js 跳转链接的几种方式
    TP5.0 关于validate验证器add和edit验证规则不统一的复杂情形
    Navicat Premium (Windows) 15破解版 安装步骤
    利用jquery和ajax实现省市区的三级联动
    常用的SAP标准函数
    SAP 录屏BDC使用—实例
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7135784.html
Copyright © 2011-2022 走看看