2021.5.15 1rating 补题报告

C - Pocket Book

1.思路

  给定n个长度为m的字符串,任意两个字符串可以交换前k个字符,交换后字符串变成新的字符串,最多能产生多少个不同的字符串。找规律可以发现,每个字符串的每一列都可以变成所有字符串的该列的字符,所以统计每一列有多少个不同的字符,排列组合相乘即可。

2.代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 const int mod = 1e9 + 7;
 5 int n, m;
 6 ll ans = 1;
 7 set<char> st[105];
 8 string s[105];
 9 int main() {
10     cin >> n >> m;
11     getchar();
12     for(int i = 0; i < n; i++) {
13         cin >> s[i];
14     }
15     for(int i = 0; i < n; i++) {
16         for(int j = 0;j < m; j++) {
17             st[j].insert(s[i][j]);
18         }
19     }      
20     for(int i = 0; i < m; i++) {
21        ans = (ans * st[i].size()) % mod;
22     }
23     cout << ans << endl;
24     
25     return 0;
26 }
View Code
原文地址:https://www.cnblogs.com/lvguapi/p/14823346.html