function y=FSAPB(n,Lp,M,Pth)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%分组,并记录每组的标签个数到nz
nz=zeros(1,M);
Lp_temp=1;
y=0;
for i=1:n
tag(i)=floor(rand*M);
for j=1:M
if(tag(i)==(j-1))
nz(j)=nz(j)+1;
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%确定第一组标签所在Lp的时隙%%%%%%%%
for i=1:nz(1)
tag1(i)=floor(rand*Lp);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Lp开始%%%%%%%%%%%%%%%%%%%%%%%%%%
ydxb=1;%已读标签下标
coll_num=0;
read_num=0;
while(Lp_temp<=Lp)
numOfZero=0;
j=1;
wz=0;
tag_hr=zeros(1,nz(1));
for i=1:nz(1)
if(tag1(i)==0)
numOfZero=numOfZero+1;
wz(j)=i;
j=j+1;
end
end
if(numOfZero==0)
for i=1:nz(1)
tag1(i)=tag1(i)-1;
end
elseif (numOfZero==1)
read_num=read_num+1;
tag_hr(ydxb)=wz(1);
ydxb=ydxb+1;
for i=1:nz(1)
if(i==wz(1))
tag1(i)=-1000;
end
tag1(i)=tag1(i)-1;
end
elseif(numOfZero>1)
coll_num=coll_num+1;
for i=1:nz(1)
if(shuyu(i,wz))tag1(i)=Lp-Lp_temp+2*(coll_num-1)+floor(rand*2);
else tag1(i)=tag1(i)-1;
end
end
end
Lp_temp=Lp_temp+1;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%LP阶段结束%%%%%%%%%%%%%%%
y=Lp;
%%%%%%%%%%%%%%判断是要用Ladd还是L1%%%%%%%%%%
if((coll_num/Lp)<Pth)
while(read_num<nz(1))
numOfZero=0;
j=1;
wz=0;
for i=1:nz(1)
if(tag1(i)==0)
numOfZero=numOfZero+1;
wz(j)=i;
j=j+1;
end
end
if(numOfZero==0)
for i=1:nz(1)
tag1(i)=tag1(i)-1;
end
elseif(numOfZero==1)
read_num=read_num+1;
tag_hr(ydxb)=wz(1);
ydxb=ydxb+1;
for i=1:nz(1)
if(i==wz(1))
tag1(i)=-1000;
end
tag1(i)=tag1(i)-1;
end
elseif(numOfZero>1)
for i=1:nz(1)
if(shuyu(i,wz))tag1(i)=floor(rand*2);
else tag1(i)=tag1(i)+1;
end
end
end
y=y+1;
end
%%%%%%%%%%%%%%%%%L1
elseif((coll_num/Lp)>=Pth)
L1=nz(1)-read_num;
for i=1:nz(1)
if(~shuyu(i,tag_hr))
tag2(i)=floor(rand*L1);
else tag2(i)=-10000;
end
end
while(read_num<nz(1))
numOfZero=0;
j=1;
wz=0;
%%%%%%%%%判断某个时隙中0的个数,并记录位置
for i=1:nz(1)
if(tag2(i)==0)
numOfZero=numOfZero+1;
wz(j)=i;
j=j+1;
end
end
if(numOfZero==0)
for i=1:nz(1)
tag2(i)=tag2(i)-1;
end
elseif(numOfZero==1)
read_num=read_num+1;
tag_hr(ydxb)=wz(1);
ydxb=ydxb+1;
for i=1:nz(1)
if(i==wz(1))
tag2(i)=-10000;
end
tag2(i)=tag2(i)-1;
end
elseif(numOfZero>1)
for i=1:nz(1)
if(shuyu(i,wz))tag2(i)=floor(rand*2);
else tag2(i)=tag2(i)+1;
end
end
end
y=y+1;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%第一组标签阅读完毕
%%%%%%%%%%%%%%%%%%%%%%%%%-------------------------
if(M>=2)
for k=2:M
L(k-1)=floor(0.87*nz(k-1))+1;
read_num=0;
coll_num=0;
for i=1:nz(k)
tag3(i)=floor(rand*L(k-1));
end
%%%%%%%%%
while(read_num<nz(k))
numOfZero=0;
j=1;
wz=0;
%%%%%%%%%判断某个时隙中0的个数,并记录位置
for i=1:nz(k)
if(tag3(i)==0)
numOfZero=numOfZero+1;
wz(j)=i;
j=j+1;
end
end
if(numOfZero==0)
for i=1:nz(k)
tag3(i)=tag3(i)-1;
end
elseif(numOfZero==1)
read_num=read_num+1;
for i=1:nz(k)
if(i==wz(1))
tag3(i)=-10000;
end
tag3(i)=tag3(i)-1;
end
elseif(numOfZero>1)
for i=1:nz(k)
if(shuyu(i,wz))tag3(i)=floor(rand*2);
else tag3(i)=tag3(i)+1;
end
end
end
y=y+1;
end
%%%%%%%%%
end
end
end