program foolish;
const max=4782969;var n,m,maxx:longint;a,b:array[0..max+1] of int64;h,oo,o:array[1..max+10]of int64;procedure qsort(l,r:longint);var x,y,i,j:longint;begini:=l;j:=r;x:=a[random(r-l)+l];repeatwhile a[i]>x do inc(i);while a[j]<x do dec(j);if i<=j then beginy:=a[i];a[i]:=a[j];a[j]:=y;y:=b[i];b[i]:=b[j];b[j]:=y;inc(i);dec(j);end;until i>j;if i<r then qsort(i,r);if j>l then qsort(l,j);end;procedure init;beginread(n);read(m);end;procedure divide(n:longint);var s,p:longint;begins:=1;p:=n;while n>0 dobegins:=s*(n mod 10);n:=n div 10;end;inc(a[s]);end;procedure prepare;var i:longint;beginfor i:=1 to n-1 dodivide(i);for i:=0 to max dob[i]:=i;end;procedure down(p,q:longint);var j,x,y,z:longint;beginx:=h[q];y:=oo[q];z:=o[q];j:=q*2;while j<=p dobeginif (j<p)and(h[j+1]>h[j]) then inc(j);if x>=h[j] then j:=p+1else beginh[q]:=h[j];oo[q]:=oo[j];o[q]:=o[j];q:=j;j:=j*2;end;end;h[q]:=x;oo[q]:=y;o[q]:=z;end;procedure swap(var x,y:int64);var t:int64;begint:=x;x:=y;y:=t;end;procedure tiao;var i:longint;beginfor i:=1 to max-1 doif a[i]=0 then maxx:=i-1;end;procedure main;var i:longint;ans:int64;beginfor i:=1 to maxx dobeginh[i]:=a[i]*a[1];oo[i]:=i;o[i]:=1;end;for i:=maxx div 2 downto 1 dodown(maxx,i);ans:=0;for i:=1 to m dobeginans:=ans+h[1];inc(o[1]);h[1]:=a[o[1]]*a[oo[1]];down(maxx,1);end;write(ans);end;beginrandomize;init;prepare;swap(a[n-1],a[max]);swap(b[n-1],b[max]);qsort(1,max-1);tiao;main;end.
评论