【xsy1058】 单词 乱搞

时间:2022-08-28 18:24:18

题目大意:给你$n$个长度为$m$的字符串,字符集仅为{x,y,z}三个字符,定义两个字符串$(s_i,s_j)$的相似度为$\sum_{k=1}^{m} [s_i[k]==s_j[k]]$。

从$0$到$m$询问你相似度为i的字符串的对数。

数据范围:$n\times m≤100000$(没错是乘号)

此题的题解做法貌似是:分$m≤12$和$m>12$来做。

先考虑$m≥12$的,考虑直接暴力判断,复杂度就是$O(mn^2)$的,显然是可以过的

当$m≤12$时,我们做一个$dp$,令$f[i][j]$表示前$i$个字符串中,字符串为$j$的个数。

考虑到字符集的大小,字符串的数量显然是$3^m$的

时间复杂度:$O(n\times 3^{m})$。

然而,这题的时限是3s,经过测试,我们发现当$m>2$时,都可以在$3s$内跑完。

所以我们只需要特殊处理下$m=1$和$m=2$的情况就可以了。

代码短了很多qwq

(所以字符集是不是可以出大一些了呢)

 #include<bits/stdc++.h>
#define M 100005
#define L long long
#define S(x) x*(x-1)/2
using namespace std;
char *c[M]={};
int n,m; L ans[M]={}; void solve1(){
L cnt1=,cnt2=,cnt3=;
for(int i=;i<=n;i++){
if(c[i][]=='x') cnt1++;
if(c[i][]=='y') cnt2++;
if(c[i][]=='z') cnt3++;
}
ans[]=S(cnt1)+S(cnt2)+S(cnt3);
ans[]=cnt1*cnt2+cnt1*cnt3+cnt2*cnt3;
}
void solve2(){
L cnt[][]={};
for(int i=;i<=n;i++){
int l,r;
if(c[i][]=='x') l=;
if(c[i][]=='y') l=;
if(c[i][]=='z') l=;
if(c[i][]=='x') r=;
if(c[i][]=='y') r=;
if(c[i][]=='z') r=;
cnt[l][r]++;
}
for(int i=;i<;i++) for(int j=;j<;j++){
ans[]+=S(cnt[i][j]);
for(int ii=;ii<;ii++) for(int jj=;jj<;jj++){
int hh=(i==ii)+(j==jj); if(hh==) continue;
ans[hh]+=cnt[i][j]*cnt[ii][jj];
}
}
ans[]/=; ans[]/=;
}
void solve3(){
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++){
int cnt=;
for(int k=;k<m;k++) cnt+=(c[i][k]==c[j][k]);
ans[cnt]++;
}
} int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
c[i]=new char[m];
scanf("%s",c[i]);
}
if(m==) solve1();
if(m==) solve2();
if(m>=) solve3();
for(int i=;i<=m;i++) printf("%lld\n",ans[i]);
}

【xsy1058】 单词 乱搞的更多相关文章

  1. 【BZOJ-4692】Beautiful Spacing 二分答案 &plus; 乱搞(DP?)

    4692: Beautiful Spacing Time Limit: 15 Sec  Memory Limit: 128 MBSubmit: 46  Solved: 21[Submit][Statu ...

  2. URAL 1827 Indigenous Wars(排序、乱搞)

    题意:给一个长度为n数组{a[i]}.有m个操作Ti,Si,Li表示找以Ti值结束,以Si值开始,长度为Li的连续子串.找到后,将区间的答案值设为1.一开始答案值全部为0.最后输出n个答案值. 好久没 ...

  3. UVA 11853 &lbrack;dfs乱搞&rsqb;

    /* 大连热身E题 不要低头,不要放弃,不要气馁,不要慌张 题意: 在1000×1000的格子内有很多个炮弹中心,半径给定. 为某人能否从西部边界出发,从东部边界走出. 不能输出不能,能的话输出最北边 ...

  4. Codeforces 732e &lbrack;贪心&rsqb;&lbrack;stl乱搞&rsqb;

    /* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...

  5. 【BZOJ-3578】GTY的人类基因组计划2 set &plus; map &plus; Hash 乱搞

    3578: GTY的人类基因组计划2 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 367  Solved: 159[Submit][Status][ ...

  6. 【BZOJ-2937】建造酿酒厂 前缀和 &plus; 展环为链 &plus; 乱搞

    2937: [Poi2000]建造酿酒厂 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 70  Solved: 24[Submit][Status][D ...

  7. SCOI 2013 密码 &amp&semi; 乱搞

    题意: Fish 是一条生活在海里的鱼.有一天他很无聊,就到处去寻宝.他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进.通过翻阅古籍,Fish 得知了这个密码的相关信息:1. 该密 ...

  8. 种树 &amp&semi; 乱搞

    题意: 在一个(n+1)*(m+1)的网格点上种k棵树,树必须成一条直线,相邻两棵树距离不少于D,求方案数. SOL: 这题吧...巨坑无比,本来我的思路是枚举每一个从(0,0)到(i,j)的矩形,然 ...

  9. URAL - 1920 Titan Ruins&colon; the Infinite Power of Magic&lpar;乱搞&rpar;

    搞死人的题目,,, 就是在n*n的方格中找路径长度为L的回路. 开始的思路值适合n为偶数的情况,而忽视了奇数的case,所以wa了一次. 然后找奇数case的策略,代码从70多行变成了100多,然后改 ...

随机推荐

  1. ubuntu vps 安装 jdk

    Introduction Java is a programming technology originally developed by Sun Microsystems and later acq ...

  2. dockerRegistry搭建

    docker registry安装: 官方仓库下载registry     pull镜像: fu@ubuntu:~$ sudo docker pull registry    运行镜像 : sudo ...

  3. JQ实现复选框的全选反选不选

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. C&num;最基本的小说爬虫

    新手学习C#,自己折腾弄了个简单的小说爬虫,实现了把小说内容爬下来写入txt,还只能爬指定网站. 第一次搞爬虫,涉及到了网络协议,正则表达式,弄得手忙脚乱跑起来效率还差劲,慢慢改吧. 爬的目标:htt ...

  5. 【转】FIO使用指南

    原文地址:http://blog.csdn.net/yuesichiu/article/details/8722417 Fio压测工具和io队列深度理解和误区 这个文档是对fio-2.0.9 HOWT ...

  6. 【转】three&period;js详解之入门篇

    原文链接:https://www.cnblogs.com/shawn-xie/archive/2012/08/16/2642553.html   开场白 webGL可以让我们在canvas上实现3D效 ...

  7. 【漫画解读】HDFS存储原理

    根据Maneesh Varshney的漫画改编,以简洁易懂的漫画形式讲解HDFS存储机制与运行原理,非常适合Hadoop/HDFS初学者理解. 一.角色出演 如上图所示,HDFS存储相关角色与功能如下 ...

  8. 同源策略与CORS

    同源策略 同源策略是浏览器保护用户安全上网的重要措施,协议.域名.端口号三者相同即为同源. 不同源下,浏览器不允许js操作Cookie.LocalStorage.DOM等数据或页面元素,也不允许发送a ...

  9. shell 基本命令

    Shell基本命令   前言 前面咱们已经成功安装了Linux系统--centos7,那么现在跟着超哥奔向Linux的大门. Linux命令行的组成结构 [root@oldboy_python ~]# ...

  10. 七 shelve模块

    shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型 import shelve f=shelve.o ...