Pocket Book |
---|
题意: 给定一些长度相同的字符串,你可以无限次地交换任意两个字符串的前缀(任意长度),问最多可以得到多少个不相同的字符串。
题解: 傻傻地去模拟了一下,头都爆炸了。但是再读题,发现了蹊跷的地方——无限次地、任意两个、任意长度的前缀,那不是相当于每一位上给定一些字母,然后自由组合吗,那还不简单咯。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod = 1e9 + 7;
int n, m;
int cnt[110];
int vis[110][30];
int main() {
scanf("%d%d", &n, &m);
for(int i = 0; i < n; i++) {
char str[120];
scanf("%s", str);
for(int j = 0; j < m; j++) {
if(!vis[j][str[j] - 'A']) cnt[j]++;
vis[j][str[j] - 'A'] = 1;
}
}
ll ans = cnt[0];
for(int i = 1; i < m; i++)
ans = (ans * cnt[i]) % mod;
printf("%d\n", ans);
return 0;
}