• 程序设计思维与实践 Week15 作业 (3/4/数据班)


    程序设计思维与实践 Week15 作业 (3/4/数据班)

    A - ZJM 与霍格沃兹(必做)

    问题分析

    将魔咒与对应功能保存到数组中,录字符串哈希值与数组下标,对于要查询的字符串,求取其哈希值并在map中查找。

    #include <iostream>
    #include <string.h>
    #include <map>
    using namespace std;
    const int seed=7; 
    char str1[100005][25];
    char str2[100005][85];
    map<unsigned long long,int> mp;
    unsigned long long Hash(char*str,int l,int r)
    {
    	unsigned long long ans=0,temp=seed;
    	for(int i=l;i<=r;i++)
    	{
    		if(str[i]!=' ')
    		{
    			ans+=str[i]*temp;
    			temp*=temp;
    		}
    	}
    	return ans;
    }
    int main() {
    	int n=0;
    	char temp[105];
    	while(scanf("%[^
    ]",temp)&&strcmp(temp,"@END@")!=0)
    	{
    		getchar();
    		int len=strlen(temp);
    		int l=1,r=1;
    		for(;r<len&&temp[r]!=']';r++);
    		strncpy(str1[n],temp+1,r-l);
    		unsigned long long h=Hash(temp,l,r-1);
    		mp[h]=n;
    		l=r+2;r=len;
    		strncpy(str2[n],temp+l,r-l);
    		h=Hash(temp,l,r-1);
    		mp[h]=n;
    		n++;
    	}
    	int num;
    	scanf("%d",&num);getchar();
    	for(int i=0;i<num;i++)
    	{
    		scanf("%[^
    ]",temp);getchar();
    		int len=strlen(temp);
    		unsigned long long h;
    		if(temp[0]=='[')
    			h=Hash(temp,1,len-2);
    		else
    			h=Hash(temp,0,len-1);
    		if(mp.find(h)==mp.end())
    			printf("what?
    ");
    		else
    		{
    			if(temp[0]=='[')
    				printf("%s
    ",str2[mp[h]]);
    			else
    				printf("%s
    ",str1[mp[h]]);
    		}
    	}
    	return 0;
    }
    
    
  • 相关阅读:
    CSS盒子模型
    getContextPath、getServletPath、getRequestURI、request.getRealPath的区别
    MYSQL中的CASE WHEN END AS
    单点登录的精华总结
    git&github
    June 21st 2017 Week 25th Wednesday
    June 20th 2017 Week 25th Tuesday
    June 19th 2017 Week 25th Monday
    June 18th 2017 Week 25th Sunday
    June 17th 2017 Week 24th Saturday
  • 原文地址:https://www.cnblogs.com/master-cn/p/13052606.html
Copyright © 2020-2023  润新知