题目大意:给你$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 二分答案 + 乱搞(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 [dfs乱搞]

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

  4. Codeforces 732e [贪心][stl乱搞]

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

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

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

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

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

  7. SCOI 2013 密码 & 乱搞

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

  8. 种树 & 乱搞

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

  9. URAL - 1920 Titan Ruins: the Infinite Power of Magic(乱搞)

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

随机推荐

  1. php连接DB2

    在php.ini中添加对DB2的支持 //////////////////////////////////////////////////// ;;;;;;;;;;;;;;;;;;;;;; ; Dyn ...

  2. 2018.09.27 bzoj2510: 弱题(概率dp+循环矩阵优化)

    传送门 简单概率dp. 显然每次转移的式子可以用一个矩阵表示出来: 这个是循环矩阵. 因此只用维护第一行快速幂一波就行了. 代码: #include<bits/stdc++.h> #def ...

  3. mysql 查询表 的所有字段名称

    select COLUMN_NAME from information_schema.COLUMNS where table_name = 'your_table_name' and table_sc ...

  4. mysql 经典错误解决方案 :Incorrect string value 'xE6x95x85xE4xBAx8B...' for column

    1.关闭当前服务器2.删除正在使用的数据库drop database 数据库名字;3.查看字符集, SHOW VARIABLES LIKE 'character_set_%'; 把所有latin1的都 ...

  5. (KMP)Oulipo -- poj --3461

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=92486#problem/B http://poj.org/problem?id=3461 ...

  6. (最小生成树) Borg Maze -- POJ -- 3026

    链接: http://poj.org/problem?id=3026 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82831#probl ...

  7. Perf -- Linux下的系统性能调优工具,第 1 部分

    Perf 简介 Perf 是用来进行软件性能分析的工具. 通过它,应用程序可以利用 PMU,tracepoint 和内核中的特殊计数器来进行性能统计.它不但可以分析指定应用程序的性能问题 (per t ...

  8. 基于MATLAB的RGB转YCBCR色彩空间转换

    使用MATLAB进行图片的处理十分方便,看它的名字就知道了,矩阵实验室(matrix laboratory).一副图片的像素数据可以看成是一个二维数组一个大矩阵,MTABLAB就是为矩阵运算而生. M ...

  9. hdu 1231 最大连续子序列 ,1003 Max Sum;

    题目(1231) #include<stdio.h> #include<iostream> using namespace std; int main() { int K,nu ...

  10. UniGui之锱铢积累(仔细看这个文件)

    http://www.doc88.com/p-4022977294324.html 这个是Word文档