朋友
【問題描述】
????mxy 即將前往新世界。
????在前往新世界的過程中,ta 遇見了兩種人。一種是只和 lowb 做朋友,即當且僅當自己的能力值大于對方時他們會成為朋友,另一種是大神我們做朋友,即當且僅當自己的能力
值小于對方時他們會成為朋友。
????現在告訴你兩種人的能力值。請你計算一共有多少對友好關系。
【輸入】
????每組測試數據有三行。
????第一行有兩個整數 m,n(1 <= m,n <= 20000),分別代表前者人數和后者人數。
????第二行 m 個數,第三行 n 個數,代表各自的能力值。
【輸出】
???一行一個整數,表示有多少對友好關系。
【輸入輸出樣例】
friend.in
5 3
8 1 7 3 1
3 6 1
friend.out
7
程序:
var
m,n,i,j,q,p:longint;
tj:int64;
a,b:array[0..20000]of longint;
procedure kp1(l,r:longint);
var
i,j,mid:longint;
begin
? ? if l>=r then exit;
? ? i:=l;j:=r;mid:=a[(l+r) div 2];
? ? repeat
? ? ? ? ?while a[i]>mid do inc(i);
? ? ? ? ?while a[j]<mid do dec(j);
? ? ? ? ?if i<=j then
? ? ? ? ?begin
? ? ? ? ? ? ?a[0]:=a[i];a[i]:=a[j];a[j]:=a[0];
? ? ? ? ? ? ?inc(i);dec(j);
? ? ? ? ?end;
? ? until i>j;
? ? kp1(l,j);
? ? kp1(i,r);
end;
procedure kp2(l,r:longint);
var
i,j,mid:longint;
begin
? ? if l>=r then exit;
? ? i:=l;j:=r;mid:=b[(l+r) div 2];
? ? repeat
? ? ? ? ?while b[i]>mid do inc(i);
? ? ? ? ?while b[j]<mid 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;
? ? kp2(l,j);
? ? kp2(i,r);
end;
begin
? ? readln(m,n);
? ? for i:=1 to m do
? ? read(a[i]);
? ? readln;
? ? for i:=1 to n do
? ? read(b[i]);
? ? kp1(1,m);
? ? kp2(1,n);
? ? tj:=0;
? ? for i:=1 to m do
? ? begin
? ? ? ? q:=1;p:=n;
? ? ? ? if b[q]<a[i] then
? ? ? ? begin
? ? ? ? ? ? inc(tj,n);
? ? ? ? ? ? continue;
? ? ? ? end;
? ? ? ? if b[p]>=a[i] then break;
? ? ? ? while a[i]<=b[q] do inc(q);
? ? ? ? if a[i]>b[q] then
? ? ? ? begin
? ? ? ? ? ? tj:=tj+(n-q+1);
? ? ? ? ? ? continue;
? ? ? ? end;
? ? ? ? if a[i]>b[p] then
? ? ? ? begin
? ? ? ? ? ? tj:=tj+(n-p+1);
? ? ? ? ? ? continue;
? ? ? ? end;
? ? end;
? ? write(tj);
end.
轉載于:https://www.cnblogs.com/YYC-0304/p/9500111.html
總結