【xsy1058】 单词 乱搞
题目大意:给你n个长度为m的字符串,字符集仅为{x,y,z}三个字符,定义两个字符串(si,sj)的相似度为∑mk=1[si[k]==sj[k]]。
从0到m询问你相似度为i的字符串的对数。
数据范围:n×m≤100000(没错是乘号)
此题的题解做法貌似是:分m≤12和m>12来做。
先考虑m≥12的,考虑直接暴力判断,复杂度就是O(mn2)的,显然是可以过的
当m≤12时,我们做一个dp,令f[i][j]表示前i个字符串中,字符串为j的个数。
考虑到字符集的大小,字符串的数量显然是3m的
时间复杂度:O(n×3m)。
然而,这题的时限是3s,经过测试,我们发现当m>2时,都可以在3s内跑完。
所以我们只需要特殊处理下m=1和m=2的情况就可以了。
代码短了很多qwq
(所以字符集是不是可以出大一些了呢)
1 #include<bits/stdc++.h> 2 #define M 100005 3 #define L long long 4 #define S(x) x*(x-1)/2 5 using namespace std; 6 char *c[M]={0}; 7 int n,m; L ans[M]={0}; 8 9 void solve1(){ 10 L cnt1=0,cnt2=0,cnt3=0; 11 for(int i=1;i<=n;i++){ 12 if(c[i][0]=='x') cnt1++; 13 if(c[i][0]=='y') cnt2++; 14 if(c[i][0]=='z') cnt3++; 15 } 16 ans[1]=S(cnt1)+S(cnt2)+S(cnt3); 17 ans[0]=cnt1*cnt2+cnt1*cnt3+cnt2*cnt3; 18 } 19 void solve2(){ 20 L cnt[3][3]={0}; 21 for(int i=1;i<=n;i++){ 22 int l,r; 23 if(c[i][0]=='x') l=0; 24 if(c[i][0]=='y') l=1; 25 if(c[i][0]=='z') l=2; 26 if(c[i][1]=='x') r=0; 27 if(c[i][1]=='y') r=1; 28 if(c[i][1]=='z') r=2; 29 cnt[l][r]++; 30 } 31 for(int i=0;i<3;i++) for(int j=0;j<3;j++){ 32 ans[2]+=S(cnt[i][j]); 33 for(int ii=0;ii<3;ii++) for(int jj=0;jj<3;jj++){ 34 int hh=(i==ii)+(j==jj); if(hh==2) continue; 35 ans[hh]+=cnt[i][j]*cnt[ii][jj]; 36 } 37 } 38 ans[0]/=2; ans[1]/=2; 39 } 40 void solve3(){ 41 for(int i=1;i<=n;i++) 42 for(int j=i+1;j<=n;j++){ 43 int cnt=0; 44 for(int k=0;k<m;k++) cnt+=(c[i][k]==c[j][k]); 45 ans[cnt]++; 46 } 47 } 48 49 50 int main(){ 51 scanf("%d%d",&n,&m); 52 for(int i=1;i<=n;i++){ 53 c[i]=new char[m]; 54 scanf("%s",c[i]); 55 } 56 if(m==1) solve1(); 57 if(m==2) solve2(); 58 if(m>=3) solve3(); 59 for(int i=0;i<=m;i++) printf("%lld\n",ans[i]); 60 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!