hdu 1880
来源:互联网 发布:淘宝店铺取名字大全 编辑:程序博客网 时间:2024/06/04 18:26
题意:
中文题。。。。
解题思路:
利用字符串hash或map可求
注意:
无
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#define MAXN 110#define MAZE 100010#define mod 100003char mz[MAXN],gn[MAXN],str[MAXN],str1[MAXN*2];char hashmz[MAZE][81];char hashgn[MAZE][21];bool vis1[MAZE],vis2[MAZE];int ind1[MAZE],ind2[MAZE];inline int ELFhash(char *key){unsigned long h = 0;unsigned long g;while( *key ){h =( h<< 4) + *key++;g = h & 0xf0000000L;if( g ) h ^= g >> 24;h &= ~g;}return (int)h;}void get(char *all,char * mz,char *gn){ // sscanf(all,"%s%s",mz,gn); bool flag = false; all++; while((*all)!=0){ if((*all)==']'){ (*mz) = 0; all++; all++; flag = true; } if(flag==false){ (*mz) = (*all); mz++; } else { (*gn) = (*all); gn++; } all++; } (*gn) = 0;}void prepro(char *key){ char tmp[MAXN]; int cnt = 0; char *p = key; while((*key)!=0){ if(((*key)>='a'&&(*key)<='z')||((*key)>='A'&&(*key)<='Z')){ tmp[cnt++] = (*key); } key++; } tmp[cnt] = 0; strcpy(p,tmp);}void mkhash(char *mz,char *gn){ char tmp[MAXN]; strcpy(tmp,mz); prepro(mz); int hashnum = ELFhash(mz); int ind = hashnum%mod; while(vis1[ind]&&ind1[ind]!=hashnum){ ind++; ind%=mod; } vis1[ind] = true; ind1[ind] = hashnum; strcpy(hashmz[ind],gn); prepro(gn); hashnum = ELFhash(gn); ind = hashnum%mod; while(vis2[ind]&&ind2[ind]!=hashnum){ ind++; ind%=mod; } vis2[ind] = true; ind2[ind] = hashnum; strcpy(hashgn[ind],tmp);}int ismz(char *key,int hashnum){ int ind = hashnum%mod; int cnt=0; while(cnt<mod){ if(vis1[ind]&&ind1[ind]==hashnum) return ind; ind++; ind%=mod; cnt++; } return -1;}int isgn(char *key,int hashnum){ int ind = hashnum%mod; int cnt = 0; while(cnt<mod){ if(vis2[ind]&&ind2[ind]==hashnum) return ind; ind++; ind%=mod; cnt++; } return -1;}void solve(char *key){ prepro(key); int hashnum = ELFhash(key); int ind; if((ind = ismz(key,hashnum))!=-1){ printf("%s\n",hashmz[ind]); return; } if((ind = isgn(key,hashnum))!=-1){ printf("%s\n",hashgn[ind]); return; } printf("what?\n");}int main(){ // for(int i=100001;;++i){ // bool flag = false; // for(int j=2;j<=sqrt(i*1.0);++j){ // if(i%j==0){ // flag=true; // break; // } // } // if(!flag){ // printf("%d\n",i); // break; // } // } memset(vis1,false,sizeof(vis1)); memset(vis2,false,sizeof(vis2)); // memset(ind1,-1,sizeof(ind1)); // memset(ind2,-1,sizeof(ind2)); while(gets(str1)){ if(strcmp(str1,"@END@")==0)break; get(str1,mz,gn); mkhash(mz,gn); } int N; scanf("%d",&N); getchar(); while(N--){ gets(str); solve(str); } return 0;}
0 0
- hdu 1880
- HDU 1880
- hdu 1880
- HDU 1880
- HDU 1880
- hdu 1880
- hdu 1880 hdoj 1880
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- C++ Primer Plus第六版 第五章 编程练习答案
- js上传图片,同时生成缩略图
- ZOJ3228 Searching the String
- hdu 1372 Knight Moves
- 浅谈Linux内存管理机制
- hdu 1880
- 回溯:思想,思考
- Delphi7 内存管理及 FastMM 研究 (对于EXE和DLL内存共享很有用)
- 介绍一个用Kivy开发太空游戏的站点
- Python学习笔记之历史
- poj 2823 单调对列
- 堆和栈的大小分析
- 性能测试之容量规划
- assert()函数用法总结