Codeforce-152C-Pocket Book(排列组合+思维)
来源:互联网 发布:家用打印机 知乎 编辑:程序博客网 时间:2024/06/07 10:20
One day little Vasya found mom's pocket book. The book had n names of her friends and unusually enough, each name was exactlym letters long. Let's number the names from1 to n in the order in which they are written.
As mom wasn't home, Vasya decided to play with names: he chose three integers i, j, k (1 ≤ i < j ≤ n,1 ≤ k ≤ m), then he took names numberi and j and swapped their prefixes of lengthk. For example, if we take names "CBDAD" and "AABRD" and swap their prefixes with the length of3, the result will be names "AABAD" and "CBDRD".
You wonder how many different names Vasya can write instead of name number 1, if Vasya is allowed to perform any number of the described actions. As Vasya performs each action, he chooses numbersi, j,k independently from the previous moves and his choice is based entirely on his will. The sought number can be very large, so you should only find it modulo1000000007 (109 + 7).
The first input line contains two integers n andm (1 ≤ n, m ≤ 100) — the number of names and the length of each name, correspondingly. Thenn lines contain names, each name consists of exactlym uppercase Latin letters.
Print the single number — the number of different names that could end up in position number1 in the pocket book after the applying the procedures described above. Print the number modulo1000000007 (109 + 7).
2 3AABBAA
4
4 5ABABABCGDGAAAAAYABSA
216
In the first sample Vasya can get the following names in the position number 1: "AAB", "AAA", "BAA" and "BAB".
题意:给出n个长度为m的字符串,任意两个字符串可以交换前k个字符(k<=m),交换后字符串变成新的字符串,问最后能产生多少个不同的字符串
思路:认真想一想可以发现,每个字符串的每一列都可以变成所有字符串的该列的字符,所以只要统计每一列有多少个不同的字符,然后排列组合就行
AC代码:
#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<queue>#include<stack>#include<map>using namespace std;char str[105][105];int cnt[105];int vis[26];int n,m;int main(){ while(~scanf("%d%d",&n,&m)) { memset(cnt,0,sizeof(cnt)); for(int i=1;i<=n;i++) scanf("%s",str[i]+1); for(int i=1;i<=m;i++){ memset(vis,0,sizeof(vis)); for(int j=1;j<=n;j++){ if(vis[str[j][i]-'A']==0)cnt[i]++,vis[str[j][i]-'A']=1; } } long long ans=1; for(int i=1;i<=m;i++) ans=ans*cnt[i]%1000000007; printf("%lld\n",ans); } return 0;}
- Codeforce-152C-Pocket Book(排列组合+思维)
- Codeforces 152C Pocket Book 思维
- CodeForces 152C Pocket Book
- CF152C: Pocket Book(思维)
- code forces 152C Pocket Book
- CodeForces 152C Pocket Book(找规律+哈希)
- Codeforce 500c New Year Book Reading
- codeforce 128C Games with Rectangle 排列组合
- codeforce-501【B思维&&map】【C思维&&树】
- codeforce 9C 找规律的思维题
- codeforce 796 c Bank Hacking (思维题,分类讨论)
- codeforce Vladik and Complicated Book
- codeforces 500C New Year Book Reading (贪心+思维)
- Codeforces 500C:New Year Book Reading(思维+贪心?)
- codeforces 500c New Year Book Reading 【思维】
- CodeForces 500C New Year Book Reading(贪心+思维)
- Codeforces Round #345 (Div. 2)(C)排列组合,思维
- 【Wannafly挑战赛5】 A 【思维枚举】B C【排列组合 公式】
- 企业级缓存系统varnish应用
- vmware workstation 几种网络模式+使用笔记######(结论经验:虚拟机的NAT网卡必须配置虚拟机的子网IP+网关,才能被本地ping通)
- 跨公网调用的大坑与架构优化方案
- Cheapest Palindrome
- 如何用Python和深度神经网络发现即将流失的客户?
- Codeforce-152C-Pocket Book(排列组合+思维)
- JAVA-对称加密算法AES
- 基于j2ee,java,web,jsb毕业设计原创代写无重复,ssh毕业设计
- Django系列教程(1)--入门
- java多线程笔记
- E
- 零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(基础篇)
- 突发奇想的点子
- 阿里巴巴Java开发规约扫描插件-Alibaba Java Coding Guidelines 在idea上安装使用教程