本文共 1131 字,大约阅读时间需要 3 分钟。
1 /* 2 题意:每一次任选i,j行字符串进行任意长度前缀交换,然后不断重复这个过程,问在过程中,第一行字符串不同的个数 3 组合数学题:每一列不同的字母都有可能到第一行,所以每列的可能值相乘取模就行了。这题主要坑在题意理解上。。。 4 */ 5 #include 6 #include 7 #include 8 #include 9 #include 10 using namespace std;11 12 typedef long long ll;13 const int MAXN = 1e2 + 10;14 const int INF = 0x3f3f3f3f;15 const int MOD = 1e9 + 7;16 char s[MAXN][MAXN];17 int a[MAXN];18 map cnt[MAXN];19 20 int main(void) //Codeforces Round #108 (Div. 2) C. Pocket Book21 {22 // freopen ("D.in", "r", stdin);23 24 int n, m;25 while (scanf ("%d%d", &n, &m) == 2)26 {27 memset (a, 0, sizeof (a));28 for (int i=1; i<=m; ++i) cnt[i].clear ();29 scanf ("%s", s[1] + 1);30 for (int i=2; i<=n; ++i)31 {32 scanf ("%s", s[i] + 1);33 }34 35 for (int j=1; j<=m; ++j)36 {37 for (int i=1; i<=n; ++i)38 {39 if (cnt[j][s[i][j]] == 0)40 {41 cnt[j][s[i][j]] = 1; a[j]++;42 }43 }44 }45 46 ll ans = 1;47 for (int i=1; i<=m; ++i)48 {49 ans = (ans * a[i]) % MOD;50 }51 printf ("%I64d\n", ans);52 }53 54 return 0;55 }
转载于:https://www.cnblogs.com/Running-Time/p/4656720.html