使用位图算法,也就是 bitmap。
手机号范围为 0 到 99999999,一共有 108 个可能值。若直接使用集合存储,最多 107 个手机号会占用较大内存;使用位图时,每个手机号只占 1 位,总空间约为 12.5MB。
具体做法如下:
程序是用手机号的长度为8位的十进制数字,范围为00000000到99999999。某商城有商家的注册用户,已经使用手机号进行注册,已知每个用户的购买情况被记录到每个商品的清单里了。
例如,A商品购买用户清单:
55555555
B商品购买用户清单:
11111111
99999999
我们需要实现程序,在读取2个清单以后,请给出同时出现在2个清单里的用户个数。
第一行表示A商品的清单内用户条数N(0<=N<=10^7),接下来N行数字,每一行表示一个手机号码。
紧接着一行表示B商品的清单内用户条数M(0<=M<=10^7),接下来M行数字,每一行表示一个手机号码。
输入格式为数字,前导0会省略。由于可能多次购买,输入可能重复。
输出一行一个数字,表示同时在两个商品清单中的用户个数。同一个用户仅统计一次。
输入
3
0
3
5
4
1
4
5
99999999
输出
1
输入
2
0
3
4
0
20000004
3
99999999
输出
2
提示 内存限制?试试位运算压缩吧!
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.