Organize Your Train part II POJ 3007 (哈希&链式解决冲突)
来源:互联网 发布:nodejs 面向对象编程 编辑:程序博客网 时间:2024/06/10 10:26
题目大意:将一个字符串分解成任意的两部分,且两部的串及其反串相互组合,看能有多少种组合方式。
思路:(用map超时- -,结果换成哈希险过)。
#include<map>#include<queue>#include<cmath>#include<iostream>#include<cstdio>#include<stack>#include<cstring>#include<algorithm>#include<string>#define inf 0x3f3f3f3f#define eps 1e-5using namespace std;const double PI=acos(-1.0);char s[100],s1[100],s2[100],z[100],s3[100],s4[100];struct node{ char str[82]; node *next;}*Hash[100003];int ans;void Inset(char str[]){ int l=strlen(str); int su=0; for(int i=0;i<l;i++){ su+=s[i]*(i+1); su%=99991; } //printf("%s\n",str); if(!Hash[su]){ node *p; p=new node; p->next=0; strcpy(p->str,str); p->next=Hash[su]; Hash[su]=p; ans++; } else{ node *p; for(p=Hash[su];p;p=p->next){ if(!strcmp(p->str,str)) return ; } node *q; q=new node; q->next=0; strcpy(q->str,str); q->next=Hash[su]; Hash[su]=q; ans++; } return ;}int main(){ int n,m,i,j,k,x,y,cla; while(~scanf("%d",&cla)){ while(cla--){ memset(Hash,0,sizeof(Hash)); ans=0; int sum; scanf("%s",s); int l=strlen(s); for(i=1;i<l;i++){ x=y=0; for(j=0;j<i;j++){ s1[x++]=s[j]; } for(j=0;j<x;j++){ s3[x-j-1]=s1[j]; } s1[x]='\0';s3[x]='\0'; for(j=i;j<l;j++){ s2[y++]=s[j]; } for(j=0;j<y;j++){ s4[y-j-1]=s2[j]; } s2[y]='\0'; s4[y]='\0'; for(j=0;j<8;j++){ sum=0; if(j==0){ for(k=0;k<x;k++){ z[sum++]=s1[k]; } for(k=0;k<y;k++){ z[sum++]=s2[k]; } z[sum]='\0'; Inset(z); } else if(j==1){ for(k=0;k<x;k++){ z[sum++]=s3[k]; } for(k=0;k<y;k++){ z[sum++]=s2[k]; } z[sum]='\0'; Inset(z); } else if(j==2){ for(k=0;k<x;k++){ z[sum++]=s1[k]; } for(k=0;k<y;k++){ z[sum++]=s4[k]; } z[sum]='\0'; Inset(z); } else if(j==3){ for(k=0;k<x;k++){ z[sum++]=s3[k]; } for(k=0;k<y;k++){ z[sum++]=s4[k]; } z[sum]='\0'; Inset(z); } else if(j==4){ for(k=0;k<y;k++){ z[sum++]=s2[k]; } for(k=0;k<x;k++){ z[sum++]=s1[k]; } z[sum]='\0'; Inset(z); } else if(j==5){ for(k=0;k<y;k++){ z[sum++]=s4[k]; } for(k=0;k<x;k++){ z[sum++]=s1[k]; } z[sum]='\0'; Inset(z); } else if(j==6){ for(k=0;k<y;k++){ z[sum++]=s2[k]; } for(k=0;k<x;k++){ z[sum++]=s3[k]; } z[sum]='\0'; Inset(z); } else if(j==7){ for(k=0;k<y;k++){ z[sum++]=s4[k]; } for(k=0;k<x;k++){ z[sum++]=s3[k]; } z[sum]='\0'; Inset(z); } } } printf("%d\n",ans); } } return 0;}
0 0
- Organize Your Train part II POJ 3007 (哈希&链式解决冲突)
- poj 3007Organize Your Train part II(哈希表 链地址解决冲突)
- POJ 3007 Organize Your Train part II
- POJ 3007 Organize Your Train part II
- POJ 3007 Organize Your Train part II
- POJ 3007:Organize Your Train part II
- poj-3007 Organize Your Train part II
- poj 3007 Organize Your Train part II
- POJ 3007 - Organize Your Train part II
- poj 3007Organize Your Train part II
- POJ Organize Your Train part II 3007
- poj-3007-Organize Your Train part II
- POJ 3007.Organize Your Train part II
- POJ 3007 Organize Your Train part II map+string
- POJ 3007 Organize Your Train part II(枚举)
- 【POJ 3007】 Organize Your Train part II (字符串HASH)
- Organize Your Train part II【POJ--3007】【平衡二叉树】
- [POJ 3007]Organize Your Train part II[Hash][Trie]
- mysql之优化
- 数据库导出
- 工作5年的菜鸟
- iOS 使用NSURLSession进行断点续传
- 如何将数据库中的多表的查询数据导出到excel中
- Organize Your Train part II POJ 3007 (哈希&链式解决冲突)
- 「深入Java」Generics泛型
- Selecting Courses(二分图匹配 Hungary算法)
- Wireshark基本介绍和学习TCP三次握手
- OpenCV实践之路——Qt中调用OpenCV打开图片
- 「译」Fragment事务与Activity状态丢失
- JSP页面-------${fn:}内置函数常用()的详解
- 编程遇到的部分英语
- 谈谈操作系统的学习