本文主要是介绍集合 ( Subset ),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
集合 ( Subset )
问题描述:
给定两个集合A、B,集合内的任一元素x满足1 ≤ x ≤ ,并且每个集合的元素个数不大于 个。我们希望求出A、B之间的关系。只需确定在B 中但是不在A 中的元素的个数即可。(这个题目是根据 OIBH NOIP 2002 模拟赛 # 1 的第一题改编的。)
分析:
只要把一个数组装进哈希中,另一个就直接查找位置即可。。。。
var
i,j,k,n,m,x,y,z,kk:longint;
a:array[0..20001]of longint;
b:array[0..20001]of longint;
function find(x:longint):longint;
var
t:longint;
begin
t:=t mod 20001;
while (a[t]<>0) and (a[t]<>x) do
t:=(t+1) mod 20001;
find:=t;
end;
procedure f(x:longint);
begin
a[find(x)]:=x;
end;
procedure kp(l,r:longint);
var
i,j,key:longint;
begin
if l>=r then exit;
i:=l;
j:=r;
key:=b[(l+r) div 2];
repeat
while b[i]<key do inc(i);
while b[j]>key do dec(j);
if i<=j then
begin
b[0]:=b[i];
b[i]:=b[j];
b[j]:=b[0];
inc(i);
dec(j);
end;
until i>j;
kp(l,j);
kp(i,r);
end;
begin
readln(n);
for i:=1 to n do
begin
read(x);
f(x);
end;
readln(n);
kk:=0;
for i:=1 to n do
begin
read(x);
if a[find(x)]<>x
then inc(kk);
end;
writeln(kk);
end.
这篇关于集合 ( Subset )的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!