航空公司VIP客户查询(25 分)(Hash)
7-16 航空公司VIP客户查询(25 分)
不少航空公司都会提供优惠的会员服务,当某顾客飞行里程累积达到一定数量后,可以使用里程积分直接兑换奖励机票或奖励升舱等服务。现给定某航空公司全体会员的飞行记录,要求实现根据身份证号码快速查询会员里程积分的功能。
输入格式:
输入首先给出两个正整数N(≤105)和K(≤500)。其中K是最低里程,即为照顾乘坐短程航班的会员,航空公司还会将航程低于K公里的航班也按K公里累积。随后N行,每行给出一条飞行记录。飞行记录的输入格式为:18位身份证号码(空格)飞行里程
。其中身份证号码由17位数字加最后一位校验码组成,校验码的取值范围为0~9和x共11个符号;飞行里程单位为公里,是(0, 15 000]区间内的整数。然后给出一个正整数M(≤105),随后给出M行查询人的身份证号码。
输出格式:
对每个查询人,给出其当前的里程累积值。如果该人不是会员,则输出No Info
。每个查询结果占一行。
输入样例:
4 500
330106199010080419 499
110108198403100012 15000
120104195510156021 800
330106199010080419 1
4
120104195510156021
110108198403100012
330106199010080419
33010619901008041x
输出样例:
800
15000
1000
No Info
真的是超级感动的!!做这题做了好久好久!!至少隔了好久才写出了这题,刚开始指针各种飞输入都输入不了,后来在hbz的帮助终于不瞎飞了nice 刚开始用 map水 水不了,只能用hash 嗯hash采用的是18位全部都要上代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const long long maxn=1e5+7;
typedef struct node* Node;
typedef long long ll;
struct node
{char str[20];int sum;Node next;node(){sum=0;next=NULL;}
};
struct mm
{Node ss[maxn];
};
struct mm* add(ll m,char s[], struct mm* oo,int t)
{Node tmp=(Node)malloc(sizeof(struct node));strcpy(tmp->str,s);tmp->sum=t;tmp->next=oo->ss[m];oo->ss[m]=tmp;return oo;
}
int find(char s[],ll m,struct mm* oo)
{int sum=0;if(oo->ss[m]==NULL)return -1;Node ff=oo->ss[m];while(ff){if(strcmp(ff->str,s)==0)sum=sum+ff->sum;ff=ff->next;}//对没错就是这部分wa死我了起码wa了10次要吐血了后来才发现!!!if(sum==0)return -1;else return sum;
}
int main()
{char s[20];int t;int n,m;scanf("%d%d",&n,&m);struct mm* oo=(struct mm*)malloc(sizeof(struct mm));for(int i=0;i<maxn;i++){oo->ss[i]=(Node)malloc(sizeof(struct node));oo->ss[i]=NULL;}for(int i=0;i<n;i++){scanf("%s %d",s,&t);if(t<m) t=m;long long sum=0;for(int j=0;j<17;j++)sum=sum*10+(s[j]-'0');if(s[17]=='x')sum=sum+1e18;else sum=sum+s[17]-'0';sum=sum%maxn;oo=add(sum,s,oo,t);}int gg;scanf("%d",&gg);while(gg--){scanf("%s",s);long long sum=0;for(int j=0;j<17;j++)sum=sum*10+(s[j]-'0');if(s[17]=='x')sum=sum+1e18;else sum=sum+s[17]-'0';sum=sum%maxn;int kk;kk=find(s,sum,oo);if(kk==-1)printf("No Info\n");else printf("%d\n",kk);} return 0;
}
航空公司VIP客户查询(25 分)(Hash)相关推荐
- 7-15 航空公司VIP客户查询 (25分)(没用stl,哈希链地址法实现)
7-15 航空公司VIP客户查询 (25分) 不少航空公司都会提供优惠的会员服务,当某顾客飞行里程累积达到一定数量后,可以使用里程积分直接兑换奖励机票或奖励升舱等服务.现给定某航空公司全体会员的飞行记 ...
- # 7-45 航空公司VIP客户查询 (25 分)
7-45 航空公司VIP客户查询 (25 分) 不少航空公司都会提供优惠的会员服务,当某顾客飞行里程累积达到一定数量后,可以使用里程积分直接兑换奖励机票或奖励升舱等服务.现给定某航空公司全体会员的飞行 ...
- 7-45 航空公司VIP客户查询 (25 分)
7-45 航空公司VIP客户查询 (25 分) 不少航空公司都会提供优惠的会员服务,当某顾客飞行里程累积达到一定数量后,可以使用里程积分直接兑换奖励机票或奖励升舱等服务.现给定某航空公司全体会员的飞行 ...
- 7-3 航空公司VIP客户查询 (25 分)C语言实现
不少航空公司都会提供优惠的会员服务,当某顾客飞行里程累积达到一定数量后,可以使用里程积分直接兑换奖励机票或奖励升舱等服务.现给定某航空公司全体会员的飞行记录,要求实现根据身份证号码快速查询会员里程积分 ...
- 【PTA】7-1 航空公司VIP客户查询 (25 分)
不少航空公司都会提供优惠的会员服务,当某顾客飞行里程累积达到一定数量后,可以使用里程积分直接兑换奖励机票或奖励升舱等服务.现给定某航空公司全体会员的飞行记录,要求实现根据身份证号码快速查询会员里程积分 ...
- 7-45 航空公司VIP客户查询 (25 分)(思路+详解+map用法解释+超时解决)兄弟们来呀冲压呀呀呀呀
一:题目 不少航空公司都会提供优惠的会员服务,当某顾客飞行里程累积达到一定数量后,可以使用里程积分直接兑换奖励机票或奖励升舱等服务.现给定某航空公司全体会员的飞行记录,要求实现根据身份证号码快速查询会 ...
- 航空公司VIP客户查询 (25 分)
不少航空公司都会提供优惠的会员服务,当某顾客飞行里程累积达到一定数量后,可以使用里程积分直接兑换奖励机票或奖励升舱等服务.现给定某航空公司全体会员的飞行记录,要求实现根据身份证号码快速查询会员里程积分 ...
- 7-75 航空公司VIP客户查询 (25分)
不少航空公司都会提供优惠的会员服务,当某顾客飞行里程累积达到一定数量后,可以使用里程积分直接兑换奖励机票或奖励升舱等服务.现给定某航空公司全体会员的飞行记录,要求实现根据身份证号码快速查询会员里程积分 ...
- PTA---航空公司VIP客户查询 (25分)---Stl-Map容器简单使用
Map是STL的一个关联容器,它提供一对一(也就是一个键一个值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道.map内部自建一颗红黑树(一种非严格意义上的 ...
- 7-17 航空公司VIP客户查询 (10 分)
7-17 航空公司VIP客户查询 (10 分) 不少航空公司都会提供优惠的会员服务,当某顾客飞行里程累积达到一定数量后,可以使用里程积分直接兑换奖励机票或奖励升舱等服务.现给定某航空公司全体会员的飞行 ...
最新文章
- CentOS7搭建lamp(module)并实现Xcache、https访问
- mysql导入数据表越来越慢,快速解决mysql导数据时,格式不对、导入慢、丢数据的问题...
- Linux系统CUDA10.2+CUDNN安装教程
- 华为oj----iNOC产品部-杨辉三角的变形 .
- 课时105.边框属性下(掌握)
- 普林斯顿公开课 算法1-5:算法理论
- 语义分割算法性能比较_AAAI 2020 | 商汤:新视频语义分割和光流联合学习算法
- Java :反射详解
- 2022电工杯:5G 网络环境下应急物资配送问题(优化)
- 老路用得上的商学课-61-80学习(读书)笔记
- Error while obtaining UI hierarchy XML file: com.android.ddmlib.
- 英语词汇篇 - 构词法
- AI如何挑战传统翻译
- 学习笔记2011.11.8-张飞-硬件开发与设计实战-门控开关设计
- 说说Object c的动态性
- Linux文件相关指令
- ThingsBoard调试部署和性能分析
- android 使用asm.jar将android手机屏幕投影到电脑上
- 【软件构造】数据类型、类型检查、可变不可变数据类型
- 什么是链接诱饵,链接诱饵建设思路与作用