#include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; vector<vector<int>> lines(n); for (int i = 0; i < n; i++) { int num; cin >> num; vector<int> line; line.push_back(num); int x, y; while (cin >> x >> y) { line.push_back(x); line.push_back(y); if (cin.get() == '\n') { break; } } lines[i] = line; } vector<int> ans; vector<vector<int>> matrix(64, vector<int>(64, 0)); vector<pair<int, int>> offsets = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; for (auto line : lines) { int num = line[0]; for (int i = 1; i < line.size(); i += 2) { int x = line[i]; int y = line[i + 1]; matrix[x][y] = num; } } for (auto line : lines) { int num = line[0]; int p = 0; for (int i = 1; i < line.size(); i += 2) { int x = line[i]; int y = line[i + 1]; for (auto offset : offsets) { int newX = x + offset.first; int newY = y + offset.second; if (newX >= 0 && newX < 64 && newY >= 0 && newY < 64) { if (matrix[newX][newY] != num) { p += 1; } } else { p += 1; } } } ans.push_back(p); } for (int i = 0; i < ans.size(); i++) { cout << ans[i]; if (i != ans.size() - 1) { cout << " "; } } return 0;解释一下
时间: 2024-04-12 12:33:37 浏览: 17
这段代码是一个用于处理输入数据并计算结果的程序。让我来解释一下它的功能:
1. 首先,程序从标准输入中读取一个整数 `n`,表示输入数据的行数。
2. 然后,程序创建一个名为 `lines` 的二维整数向量,用于存储输入数据。对于每一行数据,程序首先读取一个整数 `num`,表示该行数据的编号。然后,程序读取一对整数 `x` 和 `y`,重复读取直到遇到换行符。这些整数被存储在一个临时的整数向量 `line` 中,然后将其添加到 `lines` 向量中。
3. 接下来,程序创建一个名为 `ans` 的整数向量,用于存储计算结果。程序还创建一个名为 `matrix` 的二维整数向量,其大小为 64x64,并初始化所有元素为 0。还有一个名为 `offsets` 的向量,存储了四个偏移量对。
4. 程序使用 `lines` 向量填充 `matrix` 向量,将每个位置的值设置为对应行数据的编号。
5. 然后,程序遍历 `lines` 向量中的每一行数据。对于每一行数据,程序首先获取该行数据的编号 `num`,然后初始化变量 `p` 为 0。接下来,程序遍历该行数据中的每一对整数 `(x, y)`,并遍历 `offsets` 向量中的每个偏移量 `(offsetX, offsetY)`。程序根据偏移量计算新的位置 `(newX, newY)`,如果新位置在矩阵范围内,并且与原位置的值不相等,则将 `p` 增加 1。最后,程序将 `p` 添加到 `ans` 向量中。
6. 最后,程序遍历 `ans` 向量,并将结果打印到标准输出。每个结果之间用空格分隔。
这段代码的功能是处理输入数据,并根据特定规则计算出一个结果集,并将结果打印出来。