题目大意:给你$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】 单词 乱搞的更多相关文章
-
【BZOJ-4692】Beautiful Spacing 二分答案 + 乱搞(DP?)
4692: Beautiful Spacing Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 46 Solved: 21[Submit][Statu ...
-
URAL 1827 Indigenous Wars(排序、乱搞)
题意:给一个长度为n数组{a[i]}.有m个操作Ti,Si,Li表示找以Ti值结束,以Si值开始,长度为Li的连续子串.找到后,将区间的答案值设为1.一开始答案值全部为0.最后输出n个答案值. 好久没 ...
-
UVA 11853 [dfs乱搞]
/* 大连热身E题 不要低头,不要放弃,不要气馁,不要慌张 题意: 在1000×1000的格子内有很多个炮弹中心,半径给定. 为某人能否从西部边界出发,从东部边界走出. 不能输出不能,能的话输出最北边 ...
-
Codeforces 732e [贪心][stl乱搞]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...
-
【BZOJ-3578】GTY的人类基因组计划2 set + map + Hash 乱搞
3578: GTY的人类基因组计划2 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 367 Solved: 159[Submit][Status][ ...
-
【BZOJ-2937】建造酿酒厂 前缀和 + 展环为链 + 乱搞
2937: [Poi2000]建造酿酒厂 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 70 Solved: 24[Submit][Status][D ...
-
SCOI 2013 密码 &; 乱搞
题意: Fish 是一条生活在海里的鱼.有一天他很无聊,就到处去寻宝.他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进.通过翻阅古籍,Fish 得知了这个密码的相关信息:1. 该密 ...
-
种树 &; 乱搞
题意: 在一个(n+1)*(m+1)的网格点上种k棵树,树必须成一条直线,相邻两棵树距离不少于D,求方案数. SOL: 这题吧...巨坑无比,本来我的思路是枚举每一个从(0,0)到(i,j)的矩形,然 ...
-
URAL - 1920 Titan Ruins: the Infinite Power of Magic(乱搞)
搞死人的题目,,, 就是在n*n的方格中找路径长度为L的回路. 开始的思路值适合n为偶数的情况,而忽视了奇数的case,所以wa了一次. 然后找奇数case的策略,代码从70多行变成了100多,然后改 ...
随机推荐
-
ubuntu vps 安装 jdk
Introduction Java is a programming technology originally developed by Sun Microsystems and later acq ...
-
dockerRegistry搭建
docker registry安装: 官方仓库下载registry pull镜像: fu@ubuntu:~$ sudo docker pull registry 运行镜像 : sudo ...
-
JQ实现复选框的全选反选不选
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
-
C#最基本的小说爬虫
新手学习C#,自己折腾弄了个简单的小说爬虫,实现了把小说内容爬下来写入txt,还只能爬指定网站. 第一次搞爬虫,涉及到了网络协议,正则表达式,弄得手忙脚乱跑起来效率还差劲,慢慢改吧. 爬的目标:htt ...
-
【转】FIO使用指南
原文地址:http://blog.csdn.net/yuesichiu/article/details/8722417 Fio压测工具和io队列深度理解和误区 这个文档是对fio-2.0.9 HOWT ...
-
【转】three.js详解之入门篇
原文链接:https://www.cnblogs.com/shawn-xie/archive/2012/08/16/2642553.html 开场白 webGL可以让我们在canvas上实现3D效 ...
-
【漫画解读】HDFS存储原理
根据Maneesh Varshney的漫画改编,以简洁易懂的漫画形式讲解HDFS存储机制与运行原理,非常适合Hadoop/HDFS初学者理解. 一.角色出演 如上图所示,HDFS存储相关角色与功能如下 ...
-
同源策略与CORS
同源策略 同源策略是浏览器保护用户安全上网的重要措施,协议.域名.端口号三者相同即为同源. 不同源下,浏览器不允许js操作Cookie.LocalStorage.DOM等数据或页面元素,也不允许发送a ...
-
shell 基本命令
Shell基本命令 前言 前面咱们已经成功安装了Linux系统--centos7,那么现在跟着超哥奔向Linux的大门. Linux命令行的组成结构 [root@oldboy_python ~]# ...
-
七 shelve模块
shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写;key必须为字符串,而值可以是python所支持的数据类型 import shelve f=shelve.o ...