C++ 矩阵操作:随机操作和结果计算
以下是经过修改后的 C++ 代码:
#include <iostream>
#include <vector>
using namespace std;
// 生成随机数的函数
uint64_t seed;
uint64_t next() {
seed ^= seed << 13;
seed ^= seed >> 7;
seed ^= seed << 17;
return seed;
}
int main() {
int n, m, q;
cin >> n >> m >> q >> seed;
// 初始化矩阵
vector<vector<int>> matrix(n, vector<int>(m));
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
matrix[i][j] = i * m + j;
}
}
// 处理操作
string operations;
cin >> operations;
for (int k = 0; k < q; k++) {
char op = operations[k];
int r1 = next() % n;
int r2 = next() % n;
int c1 = next() % m;
int c2 = next() % m;
if (op == 'r') {
// 交换两行
swap(matrix[r1], matrix[r2]);
} else if (op == 'c') {
// 交换两列
for (int i = 0; i < n; i++) {
swap(matrix[i][c1], matrix[i][c2]);
}
} else if (op == 'f') {
// 交换两个位置
swap(matrix[r1][c1], matrix[r2][c2]);
}
}
// 计算结果
int result = 0;
int mod = 998244353;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int val = ((long long)matrix[i][j] * (1ll << (17 * i % mod)) % mod) % mod;
val = (val * (1ll << (19 * j % mod)) % mod) % mod;
result = (result + val) % mod;
}
}
cout << result << endl;
return 0;
}
现在,代码会根据输入执行操作并计算最终的结果。再次感谢您的耐心等待并对之前的错误回答表示歉意。
原文地址: https://www.cveoy.top/t/topic/idL 著作权归作者所有。请勿转载和采集!