// 切割一次,返回本次新增的方案数 intcutOne(int x, int y, int z, vector<vector<vector<bool>>>& block){ int N = block.size(); // 切割本位置 block[x][y][z] = false; // 检测这个方块所在的三个方向 int count = 0, i; for(i=0; i<N && block[i][y][z]==false; i++) ; if(i==N) count++; for(i=0; i<N && block[x][i][z]==false; i++) ; if(i==N) count++; for(i=0; i<N && block[x][y][i]==false; i++) ; if(i==N) count++; // 返回本次新增的方案数 return count; }
intmain(){ // 输入 int N, Q; cin >> N >> Q; vector<vector<vector<bool>>> block(N, vector<vector<bool>>(N, vector<bool>(N, true))); // 处理 int ans = 0; for(int i=0; i<Q; i++){ int x, y, z; cin >> x >> y >> z; ans += cutOne(x, y, z, block); cout << ans << endl; } return0; }