题解
2025-08-24 11:53:40
发布于:广东
1阅读
0回复
0点赞
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
// 判断是否满足加法表规则
bool check(vector<vector<string>> &table, map<char, int> &mapping, int base) {
int n = table.size();
for (int i = 1; i < n; ++i) {
for (int j = 1; j < n; ++j) {
int a = mapping[table[i][0][0]];
int b = mapping[table[0][j][0]];
int sum = a + b;
string result = table[i][j];
if (result.length() == 1) {
if (mapping[result[0]] != sum % base) {
return false;
}
} else {
if (mapping[result[0]] != sum / base || mapping[result[1]] != sum % base) {
return false;
}
}
}
}
return true;
}
int main() {
int n;
cin >> n;
vector<vector<string>> table(n, vector<string>(n));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cin >> table[i][j];
}
}
vector<char> letters;
for (int i = 1; i < n; ++i) {
letters.push_back(table[i][0][0]);
}
int base = n - 1;
do {
map<char, int> mapping;
for (int i = 0; i < letters.size(); ++i) {
mapping[letters[i]] = i;
}
if (check(table, mapping, base)) {
for (int i = 0; i < letters.size(); ++i) {
cout << letters[i] << "=" << mapping[letters[i]] << " ";
}
cout << endl << base << endl;
return 0;
}
} while (next_permutation(letters.begin(), letters.end()));
cout << "ERROR!" << endl;
return 0;
}
这里空空如也
有帮助,赞一个