洛谷1013(性质、模拟)
得到两个结论后为水题:1.进制一定是字母个数,否则这个表列不出来;2.对于某个字母,这行有几个两位数,这个字母的值就为多少。
判error直接暴力一遍即可。
1 int n; 2 string grid[11][11]; 3 map<char, int> mp; 4 5 int cal(string s, int k) { 6 if (s.size() == 1) return mp[s[0]]; 7 else return mp[s[0]] * k + mp[s[1]]; 8 } 9 10 bool cal(int k) { 11 rep(i, 2, n) { 12 rep(j, 2, n) { 13 string s = grid[i][1], t = grid[1][j]; 14 if (mp[s[0]] + mp[t[0]] != cal(grid[i][j], k)) { 15 return false; 16 } 17 } 18 } 19 return true; 20 } 21 22 int main() { 23 read(n); 24 rep(i, 1, n) { 25 rep(j, 1, n) { 26 cin >> grid[i][j]; 27 } 28 } 29 rep(i, 2, n) { 30 int tmp = 0; 31 rep(j, 2, n) { 32 if (grid[i][j].length() > 1) tmp++; 33 } 34 mp[grid[i][1][0]] = tmp; 35 } 36 if (cal(n - 1)) { 37 rep(i, 2, n) { 38 cout << grid[1][i] << '=' << mp[grid[1][i][0]]; 39 if (i < n) cout << ' '; 40 else cout << '\n'; 41 } 42 writeln(n - 1); 43 } else { 44 puts("ERROR!"); 45 } 46 return 0; 47 }