标签:-name term == freopen 时间 src 数组 span mat
题意:
思路:
读完题目之后的第一思路就是用map将客户的id(string类型)与里程road(int类型)形成映射,然后直接用id查找添加里程或输出里程。但是400ms的限制妥妥的超时了。然后意识到要用哈希做,但是用哈希就有一点不好解决,每个客户的里程怎么保存,考虑了很长时间无果,搜了一下博客,发现可以用结构体来保存,平常用数组模拟链表的时候都是直接开的一维数组,所以当每个客户的信息多了后就没有结构体来的理解方便了。
第一次尝试:这个题N的上限是1e5,所以将每个客户的id转换成long long类型,然后对1e5+7取余,结果作为下标对应到数组里边存里程,完美过样例,提交果断WA。。。。。。。
第二次尝试:又看了一遍题目,思考了一下,哈希会出现冲突,需要处理冲突。所以数组模拟链表处理冲突,提交AC。
代码:
1 #include <iostream> 2 #include <queue> 3 #include <cstdio> 4 #include <algorithm> 5 #include <cmath> 6 #include <cstring> 7 #include <queue> 8 #include <map> 9 #include <vector> 10 #define INF 0x3f3f3f3f 11 #define FRE() freopen("in.txt","r",stdin) 12 13 using namespace std; 14 typedef long long ll; 15 typedef pair<int,string> P; 16 const int maxn = 1e5+7; 17 int head[maxn]; 18 struct Peo{ 19 char name[20]; 20 int road; 21 int next; 22 }p[maxn]; 23 int cnt = 0; 24 25 int GetId(char* str) { 26 ll res = 0; 27 for(int i = 0; i<strlen(str); i++) { 28 if(isdigit(str[i])) { 29 res = res*10 + str[i]-‘0‘; 30 } else { 31 res = res*10 + 10; 32 } 33 } 34 return (int)(res%maxn); 35 } 36 37 void Add_Node(char* str,int id,int temp){ 38 bool ok = true; 39 for(int i = head[id]; ~i; i = p[i].next){ 40 if(strcmp(str,p[i].name) == 0){ 41 p[i].road += temp; 42 ok = false; 43 } 44 } 45 if(ok){ 46 int i = 0; 47 p[cnt].road += temp; 48 for(i = 0; str[i]; i++){ 49 p[cnt].name[i] = str[i]; 50 } 51 p[cnt].name[i] = ‘\0‘; 52 p[cnt].next = head[id]; 53 head[id] = cnt++; 54 } 55 return; 56 } 57 58 bool ToFind(char* str,int id){ 59 for(int i = head[id]; i!=-1; i = p[i].next){ 60 if(strcmp(str, p[i].name) == 0){ 61 cout<<p[i].road<<endl; 62 return true; 63 } 64 } 65 return false; 66 } 67 68 int main() { 69 char str[20]; 70 int n,k,temp; 71 cin>>n>>k; 72 memset(head,-1,sizeof(head)); 73 for(int i = 0; i<n; i++) { 74 cin>>str>>temp; 75 if(temp<k) temp = k; 76 int index = GetId(str); 77 Add_Node(str,index,temp); 78 } 79 int m; 80 cin>>m; 81 for(int i = 0; i<m; i++) { 82 cin>>str; 83 int index = GetId(str); 84 if(!ToFind(str,index)){ 85 printf("No Info\n"); 86 } 87 } 88 return 0; 89 }
标签:-name term == freopen 时间 src 数组 span mat
原文地址:https://www.cnblogs.com/sykline/p/9737866.html