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 }