给出c++写法
时间: 2023-06-29 18:17:46 浏览: 224
以下是C++的代码实现:
```cpp
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;
int main() {
int n;
cin >> n;
vector<vector<char>> board_list(n, vector<char>(64)); // 存储每一步棋的局面
for (int i = 0; i < n; i++) {
for (int j = 0; j < 8; j++) {
string row;
cin >> row;
for (int k = 0; k < 8; k++) {
board_list[i][j*8+k] = row[k]; // 将字符串转换为二维列表
}
}
}
map<string, pair<int, int>> pos_dict; // 存储每个局面出现的次数,以及第一次出现的步数
for (int i = 0; i < n; i++) {
string board_str(board_list[i].begin(), board_list[i].end()); // 将二维列表转换为字符串
if (pos_dict.count(board_str)) { // 如果当前局面已经出现过
pos_dict[board_str].first += 1; // 对应的出现次数加1
} else { // 如果当前局面是第一次出现
pos_dict[board_str] = {1, i+1}; // 记录出现次数为1,第一次出现的步数为i+1
}
}
// 输出每个局面出现的次数
for (int i = 0; i < n; i++) {
string board_str(board_list[i].begin(), board_list[i].end());
cout << pos_dict[board_str].first << endl;
}
return 0;
}
```
思路:与Python的实现类似,首先读入棋的总步数和每一步的棋局,将每一步棋的局面存入一个二维vector中。然后遍历每一个局面,使用一个map pos_dict来存储每个局面出现的次数,以及第一次出现的步数。最后输出每个局面出现的次数即可。注意,在将二维vector转换为字符串时,可以使用vector的构造函数,将vector的begin()和end()作为参数传入,这样可以方便地将vector转换为字符串。
阅读全文