题目:字符串归类

发现字符串长度总数不大,因此把每个字符串有的字母分离,存放到桶中,再枚举合并即可,时间复杂度O(len)

赛时代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
const int N=2e5+5;
using namespace std;
int n,fa[N],cnt[N],t[30],tt[30][N],ret;
char s[N][55];
int find(int x)
{
if(x==fa[x])
return x;
return fa[x]=find(fa[x]);
}
bool merge(int x,int y)
{
int r1=find(x),r2=find(y);
if(r1==r2)
return 0;
fa[r1]=r2;
return 1;
}
int main()
{
scanf("%d",&n);
ret=n;
for(int i=1;i<=n;i++)
{
fa[i]=i;
scanf("%s",s[i]+1);
int m=strlen(s[i]+1);
memset(t,0,sizeof(t));
for(int j=1;j<=m;j++)
if(!t[s[i][j]-'a'])
t[s[i][j]-'a']=1,tt[s[i][j]-'a'][++cnt[s[i][j]-'a']]=i;
}
for(int i=0;i<26;i++)
for(int j=2;j<=cnt[i];j++)
if(merge(tt[i][j],tt[i][j-1]))
ret--;
printf("%d\n",ret);
return 0;
}

最新文章

  1. Object.assign方法复制或合并对象
  2. TableView遇到的问题
  3. win10 mysql 5.7.13 服务无法启动 3534
  4. FastSocket.Net
  5. Struts 2 拦截器
  6. PHP生成图片验证码demo【OOP面向对象版本】
  7. Flex ObjectHandles 构建绘图程序!
  8. python模块与包
  9. [每日一题] 11gOCP 1z0-052 :2013-09-1 RMAN-- repair failure........................................A20
  10. 《Linux命令行与shell脚本编程大全》 第十四章 学习笔记
  11. sql: PL/SQL proc
  12. What is the difference between JRE,JVM and JDK?
  13. Memcached源码分析之从SET命令开始说起
  14. ubuntu ssh 免密码登录
  15. C# 求链表 list 中 属性的 最大值 最小值
  16. jQuery中live函数的替代-【jQuery】
  17. HTML5:定位
  18. 《Two Dozen Short Lessons in Haskell》所有习题的索引
  19. CMake 示例
  20. 图灵数学&#183;统计学丛书.PDF(53本全)

热门文章

  1. Android序列化的几种实现方式
  2. React报错之Rendered more hooks than during the previous render
  3. STC15 串口通信
  4. KingbaseES V8R6集群外部备份案例
  5. 学习ASP.NET Core Blazor编程系列二——第一个Blazor应用程序(完)
  6. salesforce零基础学习(一百一十七)salesforce部署方式及适用场景
  7. TortoiseSVN 执行清理( cleanUp )失败的解决方案
  8. winform,水晶报表制作
  9. 邮箱的代理发送Send as权限不生效
  10. Java SE note1