博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 10887 set或hash
阅读量:7072 次
发布时间:2019-06-28

本文共 1592 字,大约阅读时间需要 5 分钟。

题意:

给出n个A串和m个B串,将这A串与B串连接(B接在A后面)可以生成n*m个AB串,求不同的AB串的数量

分析:

set直接水过

#include 
using namespace std;char str1[2000][15],str2[2000][15];int main(){// freopen("in.txt","r",stdin); int m,n,t,kase=0; scanf("%d",&t); set
M; while(t--) { scanf("%d%d",&n,&m); getchar(); for(int i=0; i

 

hash可以节省时间

#include 
using namespace std;const int maxn=2300000;const int mod=2299963;int a[maxn];char vis[maxn][30];char str1[2000][15],str2[2000][15];int BKDRHash(char *str){ int seed = 131; // 31 131 1313 13131 131313 etc.. int res = 0; while (*str) res = res * seed + (*str++); return (res & 0x7FFFFFFF)%mod;}int APHash(char *str){ int res = 0; int i; for (i=0; *str; i++) { if ((i & 1) == 0) res ^= ((res << 7) ^ (*str++) ^ (res >> 3)); else res ^= (~((res << 11) ^ (*str++) ^ (res >> 5))); } return (res & 0x7FFFFFFF)%mod;}int Judge(char *str) //两次hash{ int h1=BKDRHash(str); int h2=APHash(str); while(a[h1]) { if(a[h1]==h2) return 0; h1++; } a[h1]=h2; return 1;}int Insert(char *str){ int h=BKDRHash(str); while(a[h]) { if(strcmp(vis[h],str)==0) return 0; h++; //如果冲突往后移一位 } a[h]=1; strcpy(vis[h],str); return 1;}int main(){// freopen("in.txt","r",stdin); int m,n,t,kase=0; scanf("%d",&t); while(t--) { memset(a,0,sizeof(a)); scanf("%d%d",&n,&m); getchar(); for(int i=0; i

 

转载于:https://www.cnblogs.com/pach/p/7201107.html

你可能感兴趣的文章
iPhone X适配
查看>>
虚拟化笔记
查看>>
[vim]-vim基础
查看>>
JAVA 8入门(一)Lambda表达式
查看>>
resin集成eclipse开发
查看>>
将Excel文件中的数据导入到mysql【Excel中拼sql】
查看>>
H5移动端知识点
查看>>
【js与jquery】网站更换皮肤功能
查看>>
Ubuntu ssh连接root验证错误
查看>>
汉字转化为拼音
查看>>
基于TP的SenCMS目录结构
查看>>
jquery 验证提交
查看>>
Yaf框架的扩展-mvc-路由配置-模版视图smarty加载
查看>>
单行文本溢出and多行文本溢出...以省略号展现
查看>>
MYSQL语句
查看>>
Android WebView 详解(持续更新)
查看>>
ElasticSearch动态添加节点及相关配置项
查看>>
Android studio 使用心得(十)---android studio 多渠道打包(三)
查看>>
数据库选型的一些看法
查看>>
PHP接口&抽象类验证笔记
查看>>