zoukankan      html  css  js  c++  java
  • 程序设计思维与实践 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;
    }
    
    
  • 相关阅读:
    RDLC报表开发技巧备忘
    C#3.0"扩展方法"简记
    将activity转化成view
    取消logcat输出
    低栏的项目切换
    android edittext 限制文本框输入的长度和提示信息
    android如何调用dotnet编写的webservice
    iphone 式退出
    几种tabhost的总结(1)
    切换浏览示意图
  • 原文地址:https://www.cnblogs.com/master-cn/p/13052606.html
Copyright © 2011-2022 走看看