航空公司VIP客戶查詢

2021-07-27 21:52:14 字數 1595 閱讀 5909

5-12 航空公司vip客戶查詢   (25分)

不少航空公司都會提供優惠的會員服務,當某顧客飛行里程累積達到一定數量後,可以使用里程積分直接兌換獎勵機票或獎勵公升艙等服務。現給定某航空公司全體會員的飛行記錄,要求實現根據身份證號碼快速查詢會員里程積分的功能。

輸入首先給出兩個正整數n

n(\le 10^5≤1

0​5​

​)和k

k(\le 500≤5

00)。其中k

k是最低里程,即為照顧乘坐短程航班的會員,航空公司還會將航程低於k

k公里的航班也按k

k公里累積。隨後n

n行,每行給出一條飛行記錄。飛行記錄的輸入格式為:18位身份證號碼(空格)飛行里程。其中身份證號碼由17位數字加最後一位校驗碼組成,校驗碼的取值範圍為0~9和x共11個符號;飛行里程單位為公里,是(0, 15 000]區間內的整數。然後給出乙個正整數m

m(\le 10^5≤1

0​5​

​),隨後給出m

m行查詢人的身份證號碼。

對每個查詢人,給出其當前的里程累積值。如果該人不是會員,則輸出no info。每個查詢結果佔一行。

4 500

330106199010080419 499

110108198403100012 15000

120104195510156021 800

330106199010080419 1

4120104195510156021

110108198403100012

330106199010080419

33010619901008041x

800

15000

1000

no info

關鍵不難看出來就是把身份證的資訊給雜湊掉,map水不了,那只能想別的方法,換成long long的大數字,顯然不現實,很明顯n只有1e5,所以我們可以對1e5取模,建造雜湊表。

#include using namespace std;

const int maxn=2e6+10;

const int inf=1e5+7;

int n,m,k,pos;

int cnt=0;

char s[20];

struct node

}data[maxn];

int head[maxn];

void add(int pos,char *s,int x)

}if(!flag)

}void findx(int pos,char *s)

}if(!flag)

}int get_num(char *s)

if(s[17]=='x')sum+=1e18;

else sum=sum*10+s[17]-'0';

return sum%inf;

}int main()

{ scanf("%d%d",&n,&m);

int x;

memset(head,-1,sizeof(head));

for(int i=0;i

航空公司VIP客戶查詢

think 用stl水的,開乙個map string,int 來儲存,輸入的時候判斷里程len是否大於給定的k值,輸出時判斷是否為0。不少航空公司都會提供優惠的會員服務,當某顧客飛行里程累積達到一定數量後,可以使用里程積分直接兌換獎勵機票或獎勵公升艙等服務。現給定某航空公司全體會員的飛行記錄,要求實...

航空公司VIP客戶查詢

航空公司vip客戶查詢 不少航空公司都會提供優惠的會員服務,當某顧客飛行里程累積達到一定數量後,可以使用里程積分直接兌換獎勵機票或獎勵公升艙等服務。現給定某航空公司全體會員的飛行記錄,要求實現根據身份證號碼快速查詢會員里程積分的功能。輸入首先給出兩個正整數n 10 5 和k 500 其中k是最低里程...

航空公司VIP客戶查詢

不少航空公司都會提供優惠的會員服務,當某顧客飛行里程累積達到一定數量後,可以使用里程積分直接兌換獎勵機票或獎勵公升艙等服務。現給定某航空公司全體會員的飛行記錄,要求實現根據身份證號碼快速查詢會員里程積分的功能。輸入格式 輸入首先給出兩個正整數n 10 的5次方 和k 500 其中k是最低里程,即為照...