HUD 2648 解题报告
来源:互联网 发布:eve男性捏脸数据 编辑:程序博客网 时间:2024/05/16 05:05
HDU 2648
本题也可以用map做,但是会显示TL,先发一遍map的代码
#include<bits/stdc++.h>using namespace std;map<string,int> a;int node[10005];int main(){ int n,k; while(~scanf("%d",&n)){ memset(node,0,sizeof(node)); a.clear(); for(int i = 1; i <= n; i++){ string name; cin >> name; if(name == "memory") k = i; a[name] = i; node[i] = 0; } int m; cin >> m; while(m--){ int nn = n; while(nn--){ double price; string name; cin >> price >> name; node[a[name]] += price; } int ran = 1; for(int i = 1; i <= n; i++){ if(node[i] > node[k]) ran++; } cout << ran << endl; } } return 0;}
下面是哈希的代码,貌似用了好长的时间。。。
RunIDStatusMemoryTimeLanguageLengthSubmit Time
#include <iostream>#include <malloc.h>#include <cstring>#include <cstdio>using namespace std;#define szHASH 50000 /*HASH表总长度*/#define HASH_ROOT 50007 /*用于计算哈希地址的随机数*/struct THash{int key; /*钥匙码*/char shop_name[35];int depth;};int ran,hhh;int elem[szHASH];/*HASH地址查找*/int GetHashAddress(int key,int root){return key%root;}/*冲突地址计算,如果发现地址冲突,则用当前地址和钥匙码、哈希根重新生成一个新地址*//*int GetConflictAddress(int key, int address, int root){int addr=address+key%5+1;return addr%root;}*//*查找key*/unsigned int ELFHash(char* str){unsigned int hash = 0;unsigned int x = 0;while(*str){hash = (hash << 4) + (*str++);if((x = hash & 0xF0000000L) != 0){hash ^= (x >> 24);hash &= ~x;}}return hash & 0x7FFFFFFF;}/*根据商店数、长度和哈希根构造哈希表*/struct THash * CreateNames(int size, int root, int number){int i =0, key = 0, addr = 0, depth = 0; char name[35];struct THash * h = 0, *hash = 0;/*哈希根和长度不能太小*///if(size < root || root < 2) return 0;/*根据哈希表长度构造一个空的哈希表*/hash = (struct THash *)malloc(sizeof(struct THash) * size);/*将整个表清空*/memset(hash, 0, sizeof(struct THash) * size);for(i = 0; i < number; i++){/*首先产生一个随机的店名,并根据店名计算哈希钥匙码,再根据钥匙码计算地址*/scanf("%s",name);key=ELFHash(name);addr=GetHashAddress(key,root);h = hash + addr;if (h->depth == 0){ /*如果当前哈希地址没有被占用,则存入数据*/h->key = key;strcpy(h->shop_name,name);h->depth ++;continue;}/*如果哈希地址已经被占用了,就是说有冲突,则寻找一个新地址,直到没有被占用*/depth = 0;while(h->depth){addr = (addr+1)%HASH_ROOT;h = hash + addr;depth ++;}/*按照新地址存放数据,同时记录检索深度*/h->key = key;strcpy(h->shop_name , name);h->depth = depth + 1;}return hash;}/*在哈希表中以特定哈希根查找一个商店的记录*/struct THash * Lookup(struct THash * hash, char * name, int root){int key = 0, addr = 0;struct THash * h = 0;/*不接受空表和空名称*/if(!name || !hash) return 0;key = ELFHash(name);addr = GetHashAddress(key, root);h = hash + addr;/*如果结果不正确表示按照冲突规则继续寻找*/while(strcmp(h->shop_name , name)){addr = (addr+1)%HASH_ROOT;h = hash + addr;if(h->key == 0) return 0;}return hash + addr;}int main(){struct THash *hash=0,*h=0;int n,m,i,val;char name[35];while(scanf("%d",&n)!=EOF){memset(elem,0,sizeof(elem));hash=CreateNames(szHASH, HASH_ROOT,n);h=Lookup(hash,"memory",HASH_ROOT);hhh=h-hash;scanf("%d",&m);while(m--){ran=0;for(i=0;i<n;i++){scanf("%d%s",&val,name);h=Lookup(hash,name,HASH_ROOT);elem[h-hash]+=val;}for(i=0;i<szHASH;i++){if(elem[i]>elem[hhh])ran++;}printf("%d\n",ran+1);}}return 0;}
RunID
Status
Memory
Time
Language
Length
Submit Time
0 0
- HUD 2648 解题报告
- hud 1467(动态规划。解题报告)
- 130807hud第五场多校结题报告
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- HUD
- Antiprime解题报告
- expr解题报告
- 华容道解题报告
- tju解题报告
- zju1062/pku1095解题报告
- UsacoGate解题报告 --- 序曲
- ZJU 2060 解题报告
- Access denied for user 'root'@'localhost' (using password: YES)解决方法
- Ubuntu如何从user用户切换到root用户
- magic(4*4)
- 05-图3. 六度空间 (30)
- 链表满足条件的一次性多个删除
- HUD 2648 解题报告
- Mybatis 示例之 foreach (上)
- JSF注册ManagedBean的流程
- HDU 4514 【非联通无向图判环,树直径】
- 九度OJ-题目1517:链表中倒数第k个结点
- IIS部署网站
- css一些小tip
- 第六章 数据存储
- 判断二叉树是不是二叉查找树(BST)