洛谷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 }

猜你喜欢

转载自www.cnblogs.com/AlphaWA/p/10552340.html